summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--t/comp/parser.t10
-rw-r--r--toke.c2
2 files changed, 10 insertions, 2 deletions
diff --git a/t/comp/parser.t b/t/comp/parser.t
index 7c0db7fa37..4f2da90f50 100644
--- a/t/comp/parser.t
+++ b/t/comp/parser.t
@@ -3,7 +3,7 @@
# Checks if the parser behaves correctly in edge cases
# (including weird syntax errors)
-print "1..154\n";
+print "1..155\n";
sub failed {
my ($got, $expected, $name) = @_;
@@ -450,6 +450,14 @@ for my $pkg(()){}
$pkg = 3;
is $pkg, 3, '[perl #114942] for my $foo()){} $foo';
+eval 'Fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo'
+ .'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo'
+ .'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo'
+ .'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo'
+ .'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo'
+ .'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo';
+like $@, "^Identifier too long at ", 'ident buffer overflow';
+
# Add new tests HERE (above this line)
# bug #74022: Loop on characters in \p{OtherIDContinue}
diff --git a/toke.c b/toke.c
index 10807d5f1e..fc53c7978e 100644
--- a/toke.c
+++ b/toke.c
@@ -9244,7 +9244,7 @@ S_parse_ident(pTHX_ char **s, char **d, char * const e, int allow_package, bool
else if ( isWORDCHAR_A(**s) ) {
do {
*(*d)++ = *(*s)++;
- } while isWORDCHAR_A(**s);
+ } while (isWORDCHAR_A(**s) && *d < e);
}
else if (allow_package && **s == '\'' && isIDFIRST_lazy_if(*s+1,is_utf8)) {
*(*d)++ = ':';