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