In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/790acddeaa0d2c73524596048b129561225cf100?hp=dddb22758b5060ae9de978fbb03317185af97b24>

- Log -----------------------------------------------------------------
commit 790acddeaa0d2c73524596048b129561225cf100
Author: Father Chrysostomos <spr...@cpan.org>
Date:   Fri Apr 7 14:08:02 2017 -0700

    [perl #131085] Crash with sub-in-stash
    
    $ perl -e '$::{"A"} = sub {}; \&{"A"}'
    Segmentation fault (core dumped)
    
    The code that vivifies a typeglob out of a code ref assumed that the
    CV had a name hek, which is always the case when perl itself puts the
    code ref there (via ‘sub A{}’), but is not necessarily the case if
    someone is insinuating other stuff into the stash.
-----------------------------------------------------------------------

Summary of changes:
 gv.c      | 2 +-
 t/op/gv.t | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/gv.c b/gv.c
index d32a9c5399..315ec49169 100644
--- a/gv.c
+++ b/gv.c
@@ -421,7 +421,7 @@ Perl_gv_init_pvn(pTHX_ GV *gv, HV *stash, const char *name, 
STRLEN len, U32 flag
        /* Not actually a constant.  Just a regular sub.  */
        CV * const cv = (CV *)has_constant;
        GvCV_set(gv,cv);
-       if (CvSTASH(cv) == stash && (
+       if (CvNAMED(cv) && CvSTASH(cv) == stash && (
               CvNAME_HEK(cv) == GvNAME_HEK(gv)
            || (  HEK_LEN(CvNAME_HEK(cv)) == HEK_LEN(GvNAME_HEK(gv))
               && HEK_FLAGS(CvNAME_HEK(cv)) != HEK_FLAGS(GvNAME_HEK(gv))
diff --git a/t/op/gv.t b/t/op/gv.t
index 8d5e7dcacc..4fe6b0028a 100644
--- a/t/op/gv.t
+++ b/t/op/gv.t
@@ -1187,6 +1187,10 @@ package GV_DOWNGRADE {
     ::like "$GV_DOWNGRADE::{FOO}", qr/SCALAR/, "gv_downgrade: post";
 }
 
+# [perl #131085] This used to crash; no ok() necessary.
+$::{"A131085"} = sub {}; \&{"A131085"};
+
+
 __END__
 Perl
 Rules

--
Perl5 Master Repository

Reply via email to