Use STRLEN not int for SvPV
Obscure bugs occur with the following type of code:
unsigned int len; c = SvPV (sv, len);
The bugs occur typically on a 64 bit system. They happen because unsigned int may be a 32 bit integer, but the second argument to SvPV should be STRLEN, which is unsigned long int. Giving a pointer to a 32-bit integer where it expects a 64-bit integer causes some very odd bugs, and may even crash the interpreter. So, one has to always do like this:
STRLEN len; c = SvPV (sv, len);
and never use anything which is not STRLEN type.
I have a collection of more weird and wonderful XS bugs, found through CPAN testers, here:
Despite having known about this for years, I just found another instance in my own module, thanks to the warning messages from clang, in Text::Fuzzy:
I've just now updated it:
Perhaps it would be worth making some kind of automated checker to go through XS code and make sure the second argument to strlen is always STRLEN.