This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
util.c:report_evil_fh: Report name w/initial null
authorFather Chrysostomos <sprout@cpan.org>
Fri, 25 May 2012 05:46:56 +0000 (22:46 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 7 Jun 2012 15:18:52 +0000 (08:18 -0700)
In the error message, we shouldn’t omit a handle whose name begins
with "\0", but, rather, a handle whose name has no length to it.

t/lib/warnings/pp_hot
util.c

index 2d4e921..ad63d2a 100644 (file)
@@ -61,6 +61,15 @@ EXPECT
 print() on unopened filehandle abc at - line 4.
 ########
 # pp_hot.c [pp_print]
+use warnings 'unopened' ;
+$SIG{__WARN__} = sub { warn $_[0] =~ s/\0/\\0/rug; };
+print {"a\0b"} "anc";
+print {"\0b"} "anc";
+EXPECT
+print() on unopened filehandle a\0b at - line 4.
+print() on unopened filehandle \0b at - line 5.
+########
+# pp_hot.c [pp_print]
 use warnings 'io' ;
 # There is no guarantee that STDOUT is output only, or STDIN input only.
 # Certainly on some BSDs (at least FreeBSD, Darwin, BSDi) file descriptors
diff --git a/util.c b/util.c
index 671d3b8..e1dc7d6 100644 (file)
--- a/util.c
+++ b/util.c
@@ -3764,7 +3764,7 @@ Perl_report_evil_fh(pTHX_ const GV *gv)
            (const char *)
            (OP_IS_SOCKET(op) || (io && IoTYPE(io) == IoTYPE_SOCKET)
             ? "socket" : "filehandle");
-       const bool have_name = name && *SvPV_nolen(name);
+       const bool have_name = name && SvCUR(name);
        Perl_warner(aTHX_ packWARN(warn_type),
                   "%s%s on %s %s%s%"SVf, func, pars, vile, type,
                    have_name ? " " : "",