Skip to content

Commit 56f81af

Browse files
committed
intuit_more: no need to copy before keyword check
That also avoids crashing on overrun.
1 parent 63ccd0d commit 56f81af

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

t/re/pat.t

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ BEGIN {
2222
skip_all_without_unicode_tables();
2323
}
2424

25-
plan tests => 757; # Update this when adding/deleting tests.
25+
plan tests => 759; # Update this when adding/deleting tests.
2626

2727
run_tests() unless caller;
2828

@@ -1626,6 +1626,15 @@ EOP
16261626
like("TffffffffffffT\x{100}TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT5TTTTTTTTTTTTTTTTTTTTTTTTT3TTgTTTTTTTTTTTTTTTTTTTTT2TTTTTTTTTTTTTTTTTTTTTTTHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHiHHHHHHHfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&ffff", qr/TffffffffffffT\x{100}TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT5TTTTTTTTTTTTTTTTTTTTTTTTT3TTgTTTTTTTTTTTTTTTTTTTTT2TTTTTTTTTTTTTTTTTTTTTTTHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHiHHHHHHHfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&ffff/il, "");
16271627
}
16281628

1629+
{ # [perl #123604]
1630+
my($s, $x, @x) = ('abc', 'a', 'd');
1631+
my $long = 'b' x 2000;
1632+
my $eval = q{$s =~ m{$x[bbb]c} ? 1 : 0};
1633+
$eval =~ s{bbb}{$long};
1634+
my $match = eval $eval;
1635+
ok(1, "did not crash");
1636+
ok($match, "[bbb...] resolved as character class, not subscript");
1637+
}
16291638
} # End of sub run_tests
16301639

16311640
1;

toke.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3827,11 +3827,10 @@ S_intuit_more(pTHX_ char *s)
38273827
&& !(last_un_char == '$' || last_un_char == '@'
38283828
|| last_un_char == '&')
38293829
&& isALPHA(*s) && s[1] && isALPHA(s[1])) {
3830-
char *d = tmpbuf;
3830+
char *d = s;
38313831
while (isALPHA(*s))
3832-
*d++ = *s++;
3833-
*d = '\0';
3834-
if (keyword(tmpbuf, d - tmpbuf, 0))
3832+
s++;
3833+
if (keyword(d, s - d, 0))
38353834
weight -= 150;
38363835
}
38373836
if (un_char == last_un_char + 1)

0 commit comments

Comments
 (0)