This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #125341] check for unexpected trash after any sub start
authorTony Cook <tony@develop-help.com>
Mon, 24 Aug 2015 01:46:35 +0000 (11:46 +1000)
committerTony Cook <tony@develop-help.com>
Thu, 27 Aug 2015 04:00:05 +0000 (14:00 +1000)
t/lib/croak/toke
toke.c

index 78ff6cd..64012fb 100644 (file)
@@ -279,3 +279,8 @@ state ($x, $y, state $z);
 EXPECT
 Can't redeclare "state" in "state" at - line 2, near ", "
 Execution of - aborted due to compilation errors.
+########
+# NAME BEGIN <> [perl #125341]
+BEGIN <>
+EXPECT
+Illegal declaration of subroutine BEGIN at - line 1.
diff --git a/toke.c b/toke.c
index d30bfe6..9e332fc 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -8102,7 +8102,13 @@ Perl_yylex(pTHX)
 
                if (*s == ':' && s[1] != ':')
                    PL_expect = attrful;
-               else if ((*s != '{' && *s != '(') && key == KEY_sub) {
+               else if ((*s != '{' && *s != '(') && key != KEY_format) {
+                    assert(key == KEY_sub || key == KEY_AUTOLOAD ||
+                           key == KEY_DESTROY || key == KEY_BEGIN ||
+                           key == KEY_UNITCHECK || key == KEY_CHECK ||
+                           key == KEY_INIT || key == KEY_END ||
+                           key == KEY_my || key == KEY_state ||
+                           key == KEY_our);
                    if (!have_name)
                        Perl_croak(aTHX_ "Illegal declaration of anonymous subroutine");
                    else if (*s != ';' && *s != '}')