This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #123955] Fix assert fail with 0 s/// in quotes
authorFather Chrysostomos <sprout@cpan.org>
Mon, 2 Mar 2015 02:11:23 +0000 (18:11 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 2 Mar 2015 02:11:23 +0000 (18:11 -0800)
commitce7c414ee71d82955c799dca38981337cdf77b42
tree107d3873e4dcb97556b659db88ec275641e7a470
parent57db463f603fcd67bf53a35aa482bb24aa2c6950
[perl #123955] Fix assert fail with 0 s/// in quotes

This is related to bug #123617 and is a follow-up to eabab8bcc.

This code:

"@0{0s 000";eval"$"

begins tokenisation as follows:

stringify ( join ( $ " , @ 0 { 0 subst

When seeing the subst after the 0, the parser discards many tokens and
we end up at the ; outside the quotes.

Since PL_lex_stuff (the temporary spot for storing the contents of a
quote-like operator) is localised as of eabab8bcc, we end up with just
PL_sublex_info.repl (the temporary spot for storing the replacement
part) set.  Since it is still set when we get to the next double-
quote, it is treated as a two-part quote-like operator, like y or s.
That can’t happen, and we have assertions to make sure of it.

We need to localise PL_sublex_info.repl as well, so it gets freed
properly when scopes are popped after an error.
t/base/lex.t
toke.c