This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix warn to respect utf8-encoded scalars [perl #45549]
authorFather Chrysostomos <sprout@cpan.org>
Thu, 16 Sep 2010 12:07:50 +0000 (14:07 +0200)
committerRafael Garcia-Suarez <rgs@consttype.org>
Thu, 16 Sep 2010 12:07:50 +0000 (14:07 +0200)
t/op/warn.t
util.c

index 571dfb0..5f4e04e 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
     require './test.pl';
 }
 
-plan 18;
+plan 20;
 
 my @warnings;
 my $wa = []; my $ea = [];
@@ -107,4 +107,28 @@ $@ = $ea;
 warn;
 ok @warnings==1 && ref($warnings[0]) eq "ARRAY" && $warnings[0] == $ea;
 
+fresh_perl_like(
+ '
+   $a = "\xee\n";
+   print STDERR $a; warn $a;
+   utf8::upgrade($a);
+   print STDERR $a; warn $a;
+ ',
+  qr/^\xee(?:\r?\n\xee){3}/,
+  {},
+ 'warn emits logical characters, not internal bytes [perl #45549]'  
+);
+
+fresh_perl_like(
+ '
+   $a = "\xee\n";
+   print STDERR $a; warn $a;
+   utf8::upgrade($a);
+   print STDERR $a; warn $a;
+ ',
+  qr/^\xc3\xae(?:\r?\n\xc3\xae){3}/,
+  { switches => ['-CE'] },
+ 'warn respects :utf8 layer'
+);
+
 1;
diff --git a/util.c b/util.c
index 1809f70..2ab14d7 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1399,10 +1399,8 @@ Perl_write_to_stderr(pTHX_ SV* msv)
        dSAVED_ERRNO;
 #endif
        PerlIO * const serr = Perl_error_log;
-       STRLEN msglen;
-       const char* message = SvPVx_const(msv, msglen);
 
-       PERL_WRITE_MSG_TO_CONSOLE(serr, message, msglen);
+       do_print(msv, serr);
        (void)PerlIO_flush(serr);
 #ifdef USE_SFIO
        RESTORE_ERRNO;