This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
PATCH: [perl #126141]: qr/]]]]][\\/ fails to raise error
authorKarl Williamson <khw@cpan.org>
Fri, 4 Mar 2016 20:14:30 +0000 (13:14 -0700)
committerKarl Williamson <khw@cpan.org>
Fri, 4 Mar 2016 20:24:20 +0000 (13:24 -0700)
This was due to the trailing \ trying to look at the next character
without verifying that one actually existed.

regcomp.c
t/lib/warnings/regcomp

index 9b63fef..68c599f 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -15718,6 +15718,11 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
         }
         else if (value == '\\') {
             /* Is a backslash; get the code point of the char after it */
+
+            if (RExC_parse >= RExC_end) {
+                vFAIL("Unmatched [");
+            }
+
            if (UTF && ! UTF8_IS_INVARIANT(UCHARAT(RExC_parse))) {
                value = utf8n_to_uvchr((U8*)RExC_parse,
                                   RExC_end - RExC_parse,
index af8c06b..5d13678 100644 (file)
@@ -73,3 +73,10 @@ qr/(?[[:digit: ])/
 EXPECT
 Assuming NOT a POSIX class since no blanks are allowed in one in regex; marked by <-- HERE in m/(?[[:digit: ] <-- HERE )/ at - line 2.
 syntax error in (?[...]) in regex m/(?[[:digit: ])/ at - line 2.
+########
+# NAME [perl #126141]
+# OPTION fatal
+eval {/$_/}, print "$_ ==> ", $@ || "OK!\n" for "]]]]]]]]][\\", "]]]]][\\"
+EXPECT
+]]]]]]]]][\ ==> Unmatched [ in regex; marked by <-- HERE in m/]]]]]]]]][\ <-- HERE / at - line 2.
+]]]]][\ ==> Unmatched [ in regex; marked by <-- HERE in m/]]]]][\ <-- HERE / at - line 2.