xref: /openbsd-src/gnu/usr.bin/perl/t/comp/parser_run.t (revision f2a19305cfc49ea4d1a5feb55cd6c283c6f1e031)
15759b3d2Safresh1#!./perl
25759b3d2Safresh1
35759b3d2Safresh1# Parser tests that want test.pl, eg to use runperl() for tests to show
45759b3d2Safresh1# reads through invalid pointers.
55759b3d2Safresh1# Note that this should still be runnable under miniperl.
65759b3d2Safresh1
75759b3d2Safresh1BEGIN {
85759b3d2Safresh1    chdir 't' if -d 't';
95759b3d2Safresh1    require './test.pl';
105759b3d2Safresh1    set_up_inc( qw(. ../lib ) );
115759b3d2Safresh1}
125759b3d2Safresh1
13*f2a19305Safresh1plan(70);
145759b3d2Safresh1
155759b3d2Safresh1# [perl #130814] can reallocate lineptr while looking ahead for
165759b3d2Safresh1# "Missing $ on loop variable" diagnostic.
175759b3d2Safresh1my $result = fresh_perl(
18256a93a4Safresh1    " foreach my\n\$" . ("v" x 0x2000),
195759b3d2Safresh1    { stderr => 1 },
205759b3d2Safresh1);
215759b3d2Safresh1is($result . "\n", <<EXPECT);
22256a93a4Safresh1Identifier too long at - line 2.
235759b3d2Safresh1EXPECT
245759b3d2Safresh1
25*f2a19305Safresh1for my $var ('$00','${00}','$001','${001}','$01','${01}','$09324', '${09324}') {
26*f2a19305Safresh1    for my $utf8 ("","use utf8;") {
27*f2a19305Safresh1        for my $strict ("","use strict;") {
28*f2a19305Safresh1            fresh_perl_is(
29*f2a19305Safresh1                "${strict}${utf8}print $var;",
30*f2a19305Safresh1                "Numeric variables with more than one digit may not start with '0' at - line 1.",
31*f2a19305Safresh1                {},
32*f2a19305Safresh1                sprintf("check %s is illegal%s%s", $var,
33*f2a19305Safresh1                    $utf8   ? " under utf8" : "",
34*f2a19305Safresh1                    $strict ? " under strict" : ""
35*f2a19305Safresh1                ),
36*f2a19305Safresh1            );
37*f2a19305Safresh1        }
38*f2a19305Safresh1    }
39*f2a19305Safresh1}
40*f2a19305Safresh1
41*f2a19305Safresh1for my $var ('$0', '${0}', '$1', '${1}', '$10', '${10}', '$9324', '${9324}') {
42*f2a19305Safresh1    for my $utf8 ("","use utf8;") {
43*f2a19305Safresh1        for my $strict ("","use strict;") {
44*f2a19305Safresh1            fresh_perl_is(
45*f2a19305Safresh1                "${strict}${utf8} print '$var' if $var or !$var;",
46*f2a19305Safresh1                $var,
47*f2a19305Safresh1                {},
48*f2a19305Safresh1                sprintf("check %s is legal%s%s", $var,
49*f2a19305Safresh1                    $utf8   ? " under utf8" : "",
50*f2a19305Safresh1                    $strict ? " under strict" : ""
51*f2a19305Safresh1                )
52*f2a19305Safresh1            );
53*f2a19305Safresh1        }
54*f2a19305Safresh1    }
55*f2a19305Safresh1}
56*f2a19305Safresh1
57de8cc8edSafresh1
585759b3d2Safresh1fresh_perl_is(<<EOS, <<'EXPECT', {}, "linestart before bufptr");
595759b3d2Safresh1\${ \xB6eeeeeeeeeeee
605759b3d2Safresh1'x
615759b3d2Safresh1EOS
625759b3d2Safresh1Unrecognized character \xB6; marked by <-- HERE after ${ <-- HERE near column 4 at - line 1.
635759b3d2Safresh1EXPECT
645759b3d2Safresh1
655759b3d2Safresh1fresh_perl_is(<<'EOS', <<'EXPECTED', {}, "use after free (#131836)");
665759b3d2Safresh1${sub#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
675759b3d2Safresh1EOS
685759b3d2Safresh1Missing right curly or square bracket at - line 1, at end of line
695759b3d2Safresh1syntax error at - line 1, at EOF
705759b3d2Safresh1Execution of - aborted due to compilation errors.
715759b3d2Safresh1EXPECTED
725759b3d2Safresh1
735759b3d2Safresh1SKIP:
745759b3d2Safresh1{
755759b3d2Safresh1    # [perl #131949] use after free
765759b3d2Safresh1    # detected by ASAN
775759b3d2Safresh1    # Win32 cmd.exe can't handle newlines well
785759b3d2Safresh1    skip("Need POSIXish", 1) if $^O eq "MSWin32";
795759b3d2Safresh1    my $out = runperl(prog => "\@{ 0\n\n}", stderr => 1, non_portable => 1);
805759b3d2Safresh1    is($out, "", "check for ASAN use after free");
815759b3d2Safresh1}
825759b3d2Safresh1
835759b3d2Safresh1fresh_perl_is('-C-', <<'EXPECTED', {}, "ambiguous unary operator check doesn't crash (#132433)");
845759b3d2Safresh1Warning: Use of "-C-" without parentheses is ambiguous at - line 1.
855759b3d2Safresh1syntax error at - line 1, at EOF
865759b3d2Safresh1Execution of - aborted due to compilation errors.
875759b3d2Safresh1EXPECTED
885759b3d2Safresh1
89de8cc8edSafresh1{
90de8cc8edSafresh1    my $work = tempfile;
91de8cc8edSafresh1    open my $fh, ">", $work or die;
92de8cc8edSafresh1    binmode $fh;
93de8cc8edSafresh1    print $fh +("\n" x 50_000), "1;\n";
94de8cc8edSafresh1    close $fh;
95de8cc8edSafresh1    fresh_perl_is('require "./' . $work .'"; print "ok\n";', "ok\n",
96de8cc8edSafresh1                  {}, "many blank lines doesn't crash");
97de8cc8edSafresh1}
98de8cc8edSafresh1
995759b3d2Safresh1__END__
1005759b3d2Safresh1# ex: set ts=8 sts=4 sw=4 et:
101