This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Warn and don't emit a NUL for e.g. /\87/
authorKarl Williamson <public@khwilliamson.com>
Sun, 17 Jun 2012 17:20:39 +0000 (11:20 -0600)
committerKarl Williamson <public@khwilliamson.com>
Sun, 17 Jun 2012 17:35:06 +0000 (11:35 -0600)
/\87/ when there are fewer than 87 capture groups was being read as
/\00087/, with no warning.

regcomp.c
t/lib/warnings/regcomp
t/re/re_tests

index a962d2d..79938bd 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -10448,7 +10448,7 @@ tryagain:
                        ender = grok_bslash_c(*p++, UTF, SIZE_ONLY);
                        break;
                    case '0': case '1': case '2': case '3':case '4':
-                   case '5': case '6': case '7': case '8':case '9':
+                   case '5': case '6': case '7':
                        if (*p == '0' ||
                            (isDIGIT(p[1]) && atoi(p) >= RExC_npar))
                        {
@@ -10481,7 +10481,7 @@ tryagain:
                            FAIL("Trailing \\");
                        /* FALL THROUGH */
                    default:
-                       if (!SIZE_ONLY&& isALPHA(*p)) {
+                       if (!SIZE_ONLY&& isALNUMC(*p)) {
                            ckWARN2reg(p + 1, "Unrecognized escape \\%.1s passed through", p);
                        }
                        goto normal_default;
index 1a2fb99..a329639 100644 (file)
@@ -268,3 +268,17 @@ Unrecognized escape \9 in character class passed through in regex; marked by <--
 $a = qr/(?^-i:foo)/;
 EXPECT
 Sequence (?^-...) not recognized in regex; marked by <-- HERE in m/(?^- <-- HERE i:foo)/ at - line 2.
+########
+# regcomp.c [S_regatom]
+use warnings 'regexp' ;
+$a = qr/\87/;
+$a = qr/a\87/;
+$a = qr/a\97/;
+no warnings 'regexp' ;
+$a = qr/\87/;
+$a = qr/a\87/;
+$a = qr/a\97/;
+EXPECT
+Unrecognized escape \8 passed through in regex; marked by <-- HERE in m/\8 <-- HERE 7/ at - line 3.
+Unrecognized escape \8 passed through in regex; marked by <-- HERE in m/a\8 <-- HERE 7/ at - line 4.
+Unrecognized escape \9 passed through in regex; marked by <-- HERE in m/a\9 <-- HERE 7/ at - line 5.
index 587ff69..bb1f565 100644 (file)
@@ -1474,6 +1474,12 @@ abc\N{def        -       c       -       \\N{NAME} must be resolved by the lexer
 [a\o{400}]     \x{100} y       $&      \x{100}
 [a\o{1000}]    \x{200} y       $&      \x{200}
 
+# The below were inserting a NULL
+\87    87      y       $&      87
+a\87   a87     y       $&      a87
+a\97   a97     y       $&      a97
+
+
 # The below was inserting a NULL into the character class.
 [\8\9] \000    n       -       -
 [\8\9] 8       y       $&      8