This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
(perl #130585) prevent a spurious ) in a subparse confusing the parser
authorTony Cook <tony@develop-help.com>
Tue, 12 Feb 2019 05:30:34 +0000 (16:30 +1100)
committerTony Cook <tony@develop-help.com>
Wed, 12 Jun 2019 01:05:15 +0000 (11:05 +1000)
commit69afcc21edd23e38a4aff806a14e666d77f2bd0c
tree9ac7a8fd30dfc1139dd2bd38782e00ecb791751e
parent2dd5ef160d2c5f016b80d7946dbd60cd03f7827e
(perl #130585) prevent a spurious ) in a subparse confusing the parser

When doing a subparse, the tokenizer opens up the subexpression
with a '(' token, expecting the logic in yylex() to generate a ')'
once it sees the end of the subparsed string.

If the subparsed string includes an unmatched ')', this could confuse
the parser into finishing the expression and effectively exiting the
subparse without cleaning up (including popping the context)

To avoid that, create special bracketing tokens only generated for
a subparse and update the grammar to use those tokens in the cases
they might be used in a subparse.

This is an updated version of the patch that moves the FUNC rule
to where the original rule was and adds a test for non-regexp
subparses.
perly.act
perly.h
perly.tab
perly.y
t/lib/croak/toke
toke.c