UTF-8 bugs in string length & single line regex matches
authorDaniel P. Berrange <dan@berrange.com>
Fri, 3 Aug 2001 11:39:33 +0000 (12:39 +0100)
committerJarkko Hietaniemi <jhi@iki.fi>
Sat, 4 Aug 2001 14:12:45 +0000 (14:12 +0000)
Message-ID: <20010803113932.A19318@berrange.com>

(the mg_length() fix)

p4raw-id: //depot/perl@11572

mg.c
t/op/length.t

diff --git a/mg.c b/mg.c
index 5a8c189..2e528ba 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -185,7 +185,13 @@ Perl_mg_length(pTHX_ SV *sv)
        }
     }
 
-    (void)SvPV(sv, len);
+    if (DO_UTF8(sv)) 
+    {
+        U8 *s = (U8*)SvPV(sv, len);
+        len = Perl_utf8_length(aTHX_ s, s + len);
+    }
+    else
+        (void)SvPV(sv, len);
     return len;
 }
 
index c4445e3..3170beb 100644 (file)
@@ -115,3 +115,21 @@ print "ok 3\n";
     print "ok 13\n";
     $test++;
 }
+
+# Now for Unicode with magical vtbls
+
+{
+    require Tie::Scalar;
+    my $a;
+    tie $a, 'Tie::StdScalar';  # makes $a magical
+    $a = "\x{263A}";
+    
+    print "not " unless length($a) == 1;
+    print "ok 14\n";
+    $test++;
+
+    use bytes;
+    print "not " unless length($a) == 3;
+    print "ok 15\n";
+    $test++;
+}