Fix worrying typo in handy.h :-s
[p5sagit/p5-mst-13.2.git] / mg.c
diff --git a/mg.c b/mg.c
index dcc3a90..b126ec4 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -1913,7 +1913,7 @@ int
 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
 {
     PERL_UNUSED_ARG(sv);
-    TAINT_IF(mg->mg_len & 1);
+    TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1));
     return 0;
 }
 
@@ -1921,10 +1921,13 @@ int
 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
 {
     PERL_UNUSED_ARG(sv);
-    if (PL_tainted)
-       mg->mg_len |= 1;
-    else
-       mg->mg_len &= ~1;
+    /* update taint status unless we're restoring at scope exit */
+    if (PL_localizing != 2) {
+       if (PL_tainted)
+           mg->mg_len |= 1;
+       else
+           mg->mg_len &= ~1;
+    }
     return 0;
 }
 
@@ -2215,19 +2218,13 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
        PL_hints = SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv);
        break;
     case '\011':       /* ^I */ /* NOT \t in EBCDIC */
-       if (PL_inplace)
-           Safefree(PL_inplace);
-       if (SvOK(sv))
-           PL_inplace = savesvpv(sv);
-       else
-           PL_inplace = Nullch;
+       Safefree(PL_inplace);
+       PL_inplace = SvOK(sv) ? savesvpv(sv) : Nullch;
        break;
     case '\017':       /* ^O */
        if (*(mg->mg_ptr+1) == '\0') {
-           if (PL_osname) {
-               Safefree(PL_osname);
-               PL_osname = Nullch;
-           }
+           Safefree(PL_osname);
+           PL_osname = Nullch;
            if (SvOK(sv)) {
                TAINT_PROPER("assigning to $^O");
                PL_osname = savesvpv(sv);