This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
avoid accessing a just-freed SV (keep ponie happy)
authorDave Mitchell <davem@fdisolutions.com>
Thu, 5 May 2005 20:52:11 +0000 (20:52 +0000)
committerDave Mitchell <davem@fdisolutions.com>
Thu, 5 May 2005 20:52:11 +0000 (20:52 +0000)
p4raw-id: //depot/perl@24402

pad.c

diff --git a/pad.c b/pad.c
index 5b1148c..280b46c 100644 (file)
--- a/pad.c
+++ b/pad.c
@@ -260,14 +260,17 @@ Perl_pad_undef(pTHX_ CV* cv)
                && *SvPVX(namesv) == '&')
            {
                CV * const innercv = (CV*)curpad[ix];
+               U32 inner_rc = SvREFCNT(innercv);
+               assert(inner_rc);
                namepad[ix] = Nullsv;
                SvREFCNT_dec(namesv);
 
                if (SvREFCNT(comppad) < 2) { /* allow for /(?{ sub{} })/  */
                    curpad[ix] = Nullsv;
                    SvREFCNT_dec(innercv);
+                   inner_rc--;
                }
-               if (SvREFCNT(innercv) /* in use, not just a prototype */
+               if (inner_rc /* in use, not just a prototype */
                    && CvOUTSIDE(innercv) == cv)
                {
                    assert(CvWEAKOUTSIDE(innercv));