From 2f221fc2333bd87615c03354b591b390e8b06715 Mon Sep 17 00:00:00 2001 From: Tony Cook Date: Tue, 24 Jan 2017 11:14:28 +1100 Subject: [PATCH] (perl #129274) avoid treating the # in $# as a comment intro MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Petr Písař: Ported to 5.24.1: commit 71776ae4fad9a7659deefe0c2376d45b873ffd6a Author: Tony Cook Date: Tue Jan 24 11:14:28 2017 +1100 (perl #129274) avoid treating the # in $# as a comment intro Signed-off-by: Petr Písař --- t/op/lex.t | 15 ++++++++++++++- toke.c | 4 +++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/t/op/lex.t b/t/op/lex.t index 9ada592..d679d7c 100644 --- a/t/op/lex.t +++ b/t/op/lex.t @@ -7,7 +7,7 @@ use warnings; BEGIN { chdir 't' if -d 't'; require './test.pl'; } -plan(tests => 27); +plan(tests => 28); { no warnings 'deprecated'; @@ -223,3 +223,16 @@ fresh_perl_like( {}, '[perl #129336] - #!perl -i argument handling' ); + +# probably only failed under ASAN +fresh_perl_is( + "stat\tt\$#0", + <<'EOM', +$# is no longer supported at - line 1. +Number found where operator expected at - line 1, near "$#0" + (Missing operator before 0?) +Can't call method "t" on an undefined value at - line 1. +EOM + {}, + "[perl #129273] heap use after free or overflow" +); diff --git a/toke.c b/toke.c index 576ce72..630fc59 100644 --- a/toke.c +++ b/toke.c @@ -4090,7 +4090,9 @@ S_intuit_method(pTHX_ char *start, SV *ioname, CV *cv) if (cv || PL_last_lop_op == OP_PRINT || PL_last_lop_op == OP_SAY || isUPPER(*PL_tokenbuf)) return 0; - s = skipspace(s); + /* this could be $# */ + if (isSPACE(*s)) + s = skipspace(s); PL_bufptr = start; PL_expect = XREF; return *s == '(' ? FUNCMETH : METHOD; -- 2.7.4