Don’t use strchr when scanning for newline after <<foo
authorFather Chrysostomos <sprout@cpan.org>
Tue, 21 Aug 2012 01:06:41 +0000 (18:06 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 21 Aug 2012 21:11:02 +0000 (14:11 -0700)
commit62abd0d789549020431af511c02492ac374cf355
tree4578713d6306b9700793165386a9f786ccf79fbf
parentf35fca86375876704f26fde951b763c2bb533608
Don’t use strchr when scanning for newline after <<foo

The code that uses this is specifically for parsing <<foo inside a
quote-like operator inside a string eval.

This prints bar:

eval "s//<<foo/e
bar
foo
";
print $_ || $@;

This prints Can't find string terminator blah blah blah:

eval "s//<<foo/e #\0
bar
foo
";
print $_ || $@;

Nulls in comments are allowed elsewhere.  This prints bar:

eval "\$_ = <<foo #\0
bar
foo
";
print $_ || $@;

The problem with strchr is that it is specifically for scanning null-
terminated strings.  If embedded nulls are permitted (and should be in
this case), memchr should be used.

This code was added by 0244c3a403.
t/base/lex.t
toke.c