Fix for
Marc Lehmann [Tue, 27 Nov 2001 14:27:14 +0000 (15:27 +0100)]
Subject: [ID 20011127.151] regex result vars no longer marked as utf8
Message-Id: <E168iGY-0002pi-00.pgcc-forever-2001-11-27-14-27-14@fuji.laendle>

p4raw-id: //depot/perl@13316

ext/Encode.t
ext/Encode/Encode.xs

index 1c61027..3f5d206 100644 (file)
@@ -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
+
+
+
+
index 31be63b..7546573 100644 (file)
@@ -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