From: Daniel P. Berrange Date: Fri, 3 Aug 2001 11:39:33 +0000 (+0100) Subject: UTF-8 bugs in string length & single line regex matches X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=5636d5186838c19e5d814e8b62c9342c926b3bb0;p=p5sagit%2Fp5-mst-13.2.git UTF-8 bugs in string length & single line regex matches Message-ID: <20010803113932.A19318@berrange.com> (the mg_length() fix) p4raw-id: //depot/perl@11572 --- diff --git a/mg.c b/mg.c index 5a8c189..2e528ba 100644 --- 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; } diff --git a/t/op/length.t b/t/op/length.t index c4445e3..3170beb 100644 --- a/t/op/length.t +++ b/t/op/length.t @@ -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++; +}