Assert SvTYPE is at least PGMV whenever accessing SvSTASH
Nicholas Clark [Tue, 15 Jun 2004 07:17:17 +0000 (07:17 +0000)]
p4raw-id: //depot/perl@22935

ext/Storable/Storable.xs
sv.h

index 2efc07c..a8cd003 100644 (file)
@@ -4287,9 +4287,8 @@ static SV *retrieve_ref(pTHX_ stcxt_t *cxt, char *cname)
         */
 
        if (cname) {
-               /* Do not use sv_upgrade to preserve STASH */
-               SvFLAGS(rv) &= ~SVTYPEMASK;
-               SvFLAGS(rv) |= SVt_RV;
+               /* No need to do anything, as rv will already be PVMG.  */
+               assert (SvTYPE(rv) >= SVt_RV);
        } else {
                sv_upgrade(rv, SVt_RV);
        }
diff --git a/sv.h b/sv.h
index bc03bb8..229690c 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -742,7 +742,7 @@ and leaves the UTF-8 status as it was.
 
 #ifdef DEBUGGING
 #define SvMAGIC(sv)    ((assert(SvTYPE(sv) >= SVt_PVMG)), ((XPVMG*)  SvANY(sv))->xmg_magic)
-#define SvSTASH(sv)    ((XPVMG*)  SvANY(sv))->xmg_stash
+#define SvSTASH(sv)    ((assert(SvTYPE(sv) >= SVt_PVMG)), (XPVMG*)  SvANY(sv))->xmg_stash
 #else
 #define SvMAGIC(sv)    ((XPVMG*)  SvANY(sv))->xmg_magic
 #define SvSTASH(sv)    ((XPVMG*)  SvANY(sv))->xmg_stash