(perl #131836) avoid a use-after-free after parsing a "sub" keyword
[perl.git] / t / comp / parser_run.t
1 #!./perl
2
3 # Parser tests that want test.pl, eg to use runperl() for tests to show
4 # reads through invalid pointers.
5 # Note that this should still be runnable under miniperl.
6
7 BEGIN {
8     @INC = qw(. ../lib );
9     chdir 't' if -d 't';
10 }
11
12 require './test.pl';
13 plan(3);
14
15 # [perl #130814] can reallocate lineptr while looking ahead for
16 # "Missing $ on loop variable" diagnostic.
17 my $result = fresh_perl(
18     " foreach m0\n\$" . ("0" x 0x2000),
19     { stderr => 1 },
20 );
21 is($result . "\n", <<EXPECT);
22 syntax error at - line 3, near "foreach m0
23 "
24 Identifier too long at - line 3.
25 EXPECT
26
27 fresh_perl_is(<<EOS, <<'EXPECT', {}, "linestart before bufptr");
28 \${ \xD5eeeeeeeeeeee
29 'x
30 EOS
31 Unrecognized character \xD5; marked by <-- HERE after ${ <-- HERE near column 4 at - line 1.
32 EXPECT
33
34 fresh_perl_is(<<'EOS', <<'EXPECTED', {}, "use after free (#131836)");
35 ${sub#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
36 EOS
37 Missing right curly or square bracket at - line 1, at end of line
38 syntax error at - line 1, at EOF
39 Execution of - aborted due to compilation errors.
40 EXPECTED
41
42 __END__
43 # ex: set ts=8 sts=4 sw=4 et: