Re: untieing your victim during the act
Dave Mitchell [Wed, 20 Aug 2003 20:44:53 +0000 (21:44 +0100)]
Message-ID: <20030820194453.GD27719@fdgroup.com>

p4raw-id: //depot/perl@20793

mg.c

diff --git a/mg.c b/mg.c
index 6f92bb5..8a40a76 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -139,6 +139,10 @@ Perl_mg_get(pTHX_ SV *sv)
            if (SvTYPE(sv) == SVTYPEMASK) {
                Perl_croak(aTHX_ "Tied variable freed while still in use");
            }
+           /* guard against magic having been deleted - eg FETCH calling
+            * untie */
+           if (!SvMAGIC(sv))
+               break;
 
            /* Don't restore the flags for this entry if it was deleted. */
            if (mg->mg_flags & MGf_GSKIP)
@@ -1459,9 +1463,9 @@ S_magic_methpack(pTHX_ SV *sv, MAGIC *mg, char *meth)
 int
 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
 {
-    magic_methpack(sv,mg,"FETCH");
     if (mg->mg_ptr)
        mg->mg_flags |= MGf_GSKIP;
+    magic_methpack(sv,mg,"FETCH");
     return 0;
 }