[rt #111654] properly propgate tainted errors
authorTony Cook <tony@develop-help.com>
Sun, 11 Mar 2012 03:38:57 +0000 (14:38 +1100)
committerTony Cook <tony@develop-help.com>
Sun, 11 Mar 2012 23:09:45 +0000 (10:09 +1100)
A magic value (such as a tainted string) may not have POK set, so call
SvPV() to find out if there's something in ERRSV to report.

Possibly this should be using SvPV_nomg(), but this is the first
request for magic in this code.  Maybe the code above should be
calling SvGETMAGIC() before checking SvROK().

pp_sys.c
t/op/taint.t

index 63fbd05..49910d2 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -500,7 +500,7 @@ PP(pp_die)
            }
        }
     }
-    else if (SvPOK(ERRSV) && SvCUR(ERRSV)) {
+    else if (SvPV_const(ERRSV, len), len) {
        exsv = sv_mortalcopy(ERRSV);
        sv_catpvs(exsv, "\t...propagated");
     }
index 095c991..9cea740 100644 (file)
@@ -2198,7 +2198,6 @@ pass("no death when TARG of ref is tainted");
 }
 
 { # 111654
-  local $::TODO = "RT #111654";
   eval {
     eval { die "Test\n".substr($ENV{PATH}, 0, 0); };
     die;