Always use `const char *` to refer to the return value from SvPV
const char * to refer to the return value from SvPV.
The bug report described that in some cases, when the user searched
for an edit distance with Unicode strings, the user's input value,
$string in the following, seemed to be being overwritten and
I couldn't reproduce the user's bug using the script he supplied, but
just in case, I went through the code and tried to find anywhere that
a string might be being overwritten, by adding
const in front of
char * pointer which was used to store a Perl string.
This led me to this
where the value corresponding to
$string in the above is read using
SvPV, and this
where the value pointed to is overwritten by the code. This is a
special case which only executes when the user matches a byte string
against a character string.
As a fix for the bug, I changed to using allocated memory after the
test for Unicode, and added a field
allocated to the
tf->b and set
it to true or false so that the allocated memory could be freed. In a later commit I also added a test that the bug was fixed.
However, it would have been better if I had never allocated the return
SvPV into a
char * but always used a
const char *.
According to Ken Thompson,
Const only confuses library interfaces with the hope of catching some rare errors
(source) but I'm not sure I agree with him.