make empty string regexp stringify to the same thing regardless of unicode flags
authorYves Orton <demerphq@gmail.com>
Sat, 4 Dec 2010 14:26:38 +0000 (15:26 +0100)
committerYves Orton <demerphq@gmail.com>
Sat, 4 Dec 2010 14:26:38 +0000 (15:26 +0100)
regcomp.c
t/re/pat.t

index 5974fdb..59f11f5 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -4413,8 +4413,10 @@ Perl_re_compile(pTHX_ SV * const pattern, U32 pm_flags)
 
     DEBUG_r(if (!PL_colorset) reginitcolors());
 
-    RExC_utf8 = RExC_orig_utf8 = SvUTF8(pattern);
-
+    exp = SvPV(pattern, plen);
+    xend = exp + plen;
+    /* ignore the utf8ness if the string is 0 length */
+    RExC_utf8 = RExC_orig_utf8 = plen > 0 && SvUTF8(pattern);
 
     /****************** LONG JUMP TARGET HERE***********************/
     /* Longjmp back to here if have to switch in midstream to utf8 */
@@ -4423,9 +4425,6 @@ Perl_re_compile(pTHX_ SV * const pattern, U32 pm_flags)
     }
 
     if (jump_ret == 0) {    /* First time through */
-        exp = SvPV(pattern, plen);
-        xend = exp + plen;
-
         DEBUG_COMPILE_r({
             SV *dsv= sv_newmortal();
             RE_PV_QUOTED_DECL(s, RExC_utf8,
index 9aecb9b..95d4a39 100644 (file)
@@ -23,7 +23,7 @@ BEGIN {
 }
 
 
-plan tests => 408;  # Update this when adding/deleting tests.
+plan tests => 410;  # Update this when adding/deleting tests.
 
 run_tests() unless caller;
 
@@ -1135,6 +1135,17 @@ sub run_tests {
         iseq( eval q#my $r; my $t = "a"; $r = $t =~ s/a//for 1;"eval_ok $r"#, "eval_ok 1", "regex (s///) followed by foreach");
     }
 
+    {
+        my $str= "\x{100}";
+        chop $str;
+        my $qr= qr/$str/;
+        iseq( "$qr", "(?^:)", "Empty pattern qr// stringifies to (?^:) with unicode flag enabled - Bug #80212" );
+        $str= "";
+        $qr= qr/$str/;
+        iseq( "$qr", "(?^:)", "Empty pattern qr// stringifies to (?^:) with unicode flag disabled - Bug #80212" )
+
+    }
+
 } # End of sub run_tests
 
 1;