Re: sh Configure?
[p5sagit/p5-mst-13.2.git] / taint.c
diff --git a/taint.c b/taint.c
index 23a1b07..be69c0e 100644 (file)
--- a/taint.c
+++ b/taint.c
@@ -1,3 +1,9 @@
+/*
+ * "...we will have peace, when you and all your works have perished--and
+ * the works of your dark master to whom you would deliver us.  You are a
+ * liar, Saruman, and a corrupter of men's hearts."  --Theoden
+ */
+
 #include "EXTERN.h"
 #include "perl.h"
 
@@ -17,7 +23,7 @@ char *f;
 char *s;
 {
     if (tainting) {
-       DEBUG_u(fprintf(stderr,"%s %d %d %d\n",s,tainted,uid, euid));
+       DEBUG_u(PerlIO_printf(PerlIO_stderr(), "%s %d %d %d\n",s,tainted,uid, euid));
        if (tainted) {
            char *ug = 0;
            if (euid != uid)
@@ -44,17 +50,21 @@ taint_env()
     if (tainting) {
        MAGIC *mg = 0;
        svp = hv_fetch(GvHVn(envgv),"PATH",4,FALSE);
-       if (!svp || *svp == &sv_undef || (mg = mg_find(*svp, 't'))) {
-           tainted = 1;
+       if (!svp || *svp == &sv_undef ||
+         ((mg = mg_find(*svp, 't')) && mg->mg_len & 1))
+       {
+           tainted = TRUE;
            if (mg && MgTAINTEDDIR(mg))
-               taint_proper("Insecure directory in %s%s", "PATH");
+               taint_proper("Insecure directory in %s%s", "$ENV{PATH}");
            else
-               taint_proper("Insecure %s%s", "PATH");
+               taint_proper("Insecure %s%s", "$ENV{PATH}");
        }
        svp = hv_fetch(GvHVn(envgv),"IFS",3,FALSE);
-       if (svp && *svp != &sv_undef && mg_find(*svp, 't')) {
-           tainted = 1;
-           taint_proper("Insecure %s%s", "IFS");
+       if (svp && *svp != &sv_undef &&
+         (mg = mg_find(*svp, 't')) && mg->mg_len & 1)
+       {
+           tainted = TRUE;
+           taint_proper("Insecure %s%s", "$ENV{IFS}");
        }
     }
 }