This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Output bad locale warning in regex synthetic start class
authorKarl Williamson <khw@cpan.org>
Sun, 23 Aug 2015 16:45:22 +0000 (10:45 -0600)
committerKarl Williamson <khw@cpan.org>
Mon, 24 Aug 2015 20:01:23 +0000 (14:01 -0600)
perl detects some locale errors when a new locale is entered.  It stores
these up to output upon first use of something that uses that locale.  A
synthetic start class (SSC) is used by the regex optimizer under certain
circumstances.  Prior to this patch, it was possible for the stored up
bad locale message to not be raised if the match failed the SSC.  This
patch fixes this by changing the node type of the SSC to be one that
checks for the stored-up message should there be locale-dependent
portions of the pattern.

regcomp.c

index 982fdd1..9075fc5 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -1639,6 +1639,10 @@ S_ssc_finalize(pTHX_ RExC_state_t *pRExC_state, regnode_ssc *ssc)
         ANYOF_FLAGS(ssc) |= ANYOF_MATCHES_POSIXL;
     }
 
+    if (RExC_contains_locale) {
+        OP(ssc) = ANYOFL;
+    }
+
     assert(! (ANYOF_FLAGS(ssc) & ANYOF_LOCALE_FLAGS) || RExC_contains_locale);
 }