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