Assert that IVs and NVs can never be tainted.
[p5sagit/p5-mst-13.2.git] / sv.c
diff --git a/sv.c b/sv.c
index 25d6f33..029de83 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -3146,8 +3146,11 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
            SvIV_set(dstr,  SvIVX(sstr));
            if (SvIsUV(sstr))
                SvIsUV_on(dstr);
-           if (SvTAINTED(sstr))
-               SvTAINT(dstr);
+           /* SvTAINTED can only be true if the SV has taint magic, which in
+              turn means that the SV type is PVMG (or greater). This is the
+              case statement for SVt_IV, so this cannot be true (whatever gcov
+              may say).  */
+           assert(!SvTAINTED(sstr));
            return;
        }
        goto undef_sstr;
@@ -3167,8 +3170,11 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
            }
            SvNV_set(dstr, SvNVX(sstr));
            (void)SvNOK_only(dstr);
-           if (SvTAINTED(sstr))
-               SvTAINT(dstr);
+           /* SvTAINTED can only be true if the SV has taint magic, which in
+              turn means that the SV type is PVMG (or greater). This is the
+              case statement for SVt_NV, so this cannot be true (whatever gcov
+              may say).  */
+           assert(!SvTAINTED(sstr));
            return;
        }
        goto undef_sstr;
@@ -3188,7 +3194,8 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
                GvMULTI_on(dstr);
                return;
            }
-           return S_glob_assign(aTHX_ dstr, sstr, dtype);
+           S_glob_assign(aTHX_ dstr, sstr, dtype);
+           return;
        }
        break;
     case SVt_PVFM:
@@ -3227,7 +3234,8 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
 
     case SVt_PVGV:
        if (dtype <= SVt_PVGV) {
-           return S_glob_assign(aTHX_ dstr, sstr, dtype);
+           S_glob_assign(aTHX_ dstr, sstr, dtype);
+           return;
        }
        /* FALL THROUGH */
 
@@ -3236,8 +3244,10 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
            mg_get(sstr);
            if ((int)SvTYPE(sstr) != stype) {
                stype = SvTYPE(sstr);
-               if (stype == SVt_PVGV && dtype <= SVt_PVGV)
-                   return S_glob_assign(aTHX_ dstr, sstr, dtype);
+               if (stype == SVt_PVGV && dtype <= SVt_PVGV) {
+                   S_glob_assign(aTHX_ dstr, sstr, dtype);
+                   return;
+               }
            }
        }
        if (stype == SVt_PVLV)
@@ -3250,8 +3260,10 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
 
     if (sflags & SVf_ROK) {
        if (dtype >= SVt_PV) {
-           if (dtype == SVt_PVGV)
-               return S_pvgv_assign(aTHX_ dstr, sstr);
+           if (dtype == SVt_PVGV) {
+               S_pvgv_assign(aTHX_ dstr, sstr);
+               return;
+           }
            if (SvPVX_const(dstr)) {
                SvPV_free(dstr);
                SvLEN_set(dstr, 0);