UTF8 regexp {n} bug
Inaba Hiroto [Sat, 16 Nov 2002 19:23:00 +0000 (04:23 +0900)]
Message-ID: <3DD61C83.62FF9887@st.rim.or.jp>

p4raw-id: //depot/perl@18179

regcomp.c
t/op/pat.t

index 6b35e39..50219d9 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -1270,6 +1270,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, I32 *deltap, reg
                        l -= old;
                        /* Get the added string: */
                        last_str = newSVpvn(s  + old, l);
+                       if (UTF)
+                           SvUTF8_on(last_str);
                        if (deltanext == 0 && pos_before == b) {
                            /* What was added is a constant string */
                            if (mincount > 1) {
index 6a1d602..a6007a6 100755 (executable)
@@ -6,7 +6,7 @@
 
 $| = 1;
 
-print "1..941\n";
+print "1..942\n";
 
 BEGIN {
     chdir 't' if -d 't';
@@ -2995,4 +2995,14 @@ END
 print "\x{0712}" =~ /\p{Syriac1}/ ? "ok $test\n" : "not ok $test\n"; $test++;
 print "\x{072F}" =~ /\P{Syriac1}/ ? "ok $test\n" : "not ok $test\n"; $test++;
 
-# last test 940
+{
+    # Change #18179: previously failed with "panic: end_shift"
+    my $s = "\x{100}" x 5;
+    my $ok = $s =~ /(\x{100}{4})/;
+    my($ord, $len) = (ord $1, length $1);
+    print +($ok && $ord == 0x100 && $len == 4)
+           ? "ok $test\n" : "not ok $test\t# $ok/$ord/$len\n";
+    ++$test;
+}
+
+# last test 942