From: Marc Lehmann Date: Tue, 27 Nov 2001 14:27:14 +0000 (+0100) Subject: Fix for X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2eebba1d30c1e8308b13405e4a26ea5d35b82e5b;p=p5sagit%2Fp5-mst-13.2.git Fix for Subject: [ID 20011127.151] regex result vars no longer marked as utf8 Message-Id: p4raw-id: //depot/perl@13316 --- diff --git a/ext/Encode.t b/ext/Encode.t index 1c61027..3f5d206 100644 --- a/ext/Encode.t +++ b/ext/Encode.t @@ -8,7 +8,9 @@ BEGIN { } } use Test; -use Encode qw(from_to encode decode encode_utf8 decode_utf8 find_encoding); +use Encode qw(from_to encode decode + encode_utf8 decode_utf8 + find_encoding is_utf8); use charnames qw(greek); my @encodings = grep(/iso-?8859/,Encode::encodings()); my $n = 2; @@ -16,7 +18,7 @@ my @character_set = ('0'..'9', 'A'..'Z', 'a'..'z'); my @source = qw(ascii iso8859-1 cp1250); my @destiny = qw(cp1047 cp37 posix-bc); my @ebcdic_sets = qw(cp1047 cp37 posix-bc); -plan test => 38+$n*@encodings + 2*@source*@destiny*@character_set + 2*@ebcdic_sets*256; +plan test => 38+$n*@encodings + 2*@source*@destiny*@character_set + 2*@ebcdic_sets*256 + 6; my $str = join('',map(chr($_),0x20..0x7E)); my $cpy = $str; ok(length($str),from_to($cpy,'iso8859-1','Unicode'),"Length Wrong"); @@ -120,3 +122,19 @@ for my $i (0x41,128,256,0x20AC) } +# is_utf8 + +ok( is_utf8("\x{100}")); +ok(! is_utf8("a")); +ok(! is_utf8("")); +"\x{100}" =~ /(.)/; +ok( is_utf8($1)); # ID 20011127.151 +$a = $1; +ok( is_utf8($a)); +$a = "\x{100}"; +chop $a; +ok( is_utf8($a)); # weird but true: an empty UTF-8 string + + + + diff --git a/ext/Encode/Encode.xs b/ext/Encode/Encode.xs index 31be63b..7546573 100644 --- a/ext/Encode/Encode.xs +++ b/ext/Encode/Encode.xs @@ -613,6 +613,8 @@ SV * sv bool check CODE: { + if (SvGMAGICAL(sv)) /* it could be $1, for example */ + sv = newSVsv(sv); /* GMAGIG will be done */ if (SvPOK(sv)) { RETVAL = SvUTF8(sv) ? TRUE : FALSE; if (RETVAL && @@ -622,6 +624,8 @@ bool check } else { RETVAL = FALSE; } + if (sv != ST(0)) + SvREFCNT_dec(sv); /* it was a temp copy */ } OUTPUT: RETVAL