X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=taint.c;h=2c2e66e8ecaddee9830c274f5cdf6f786cdf1d11;hb=dfc05e5b69279e317155520cec7e590d9c42a6bc;hp=ac7a84122af305d2bf70bde881b70109d5552e29;hpb=eb1102fcca2230364ceadea29bd8e87ee51b15fa;p=p5sagit%2Fp5-mst-13.2.git diff --git a/taint.c b/taint.c index ac7a841..2c2e66e 100644 --- a/taint.c +++ b/taint.c @@ -1,6 +1,7 @@ /* taint.c * - * Copyright (c) 1997-2002, Larry Wall + * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, + * 2000, 2001, 2002, by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -57,7 +58,7 @@ Perl_taint_proper(pTHX_ const char *f, const char *s) ug = " while running with -T switch"; if (PL_unsafe || PL_taint_warn) { if(ckWARN(WARN_TAINT)) - Perl_warner(aTHX_ WARN_TAINT, f, s, ug); + Perl_warner(aTHX_ packWARN(WARN_TAINT), f, s, ug); } else { Perl_croak(aTHX_ f, s, ug); @@ -79,8 +80,25 @@ Perl_taint_env(pTHX) NULL }; + /* Don't bother if there's no *ENV glob */ if (!PL_envgv) return; + /* If there's no %ENV hash of if it's not magical, croak, because + * it probably doesn't reflect the actual environment */ + if (!GvHV(PL_envgv) || !(SvRMAGICAL(GvHV(PL_envgv)) + && mg_find((SV*)GvHV(PL_envgv), PERL_MAGIC_env))) { + bool was_tainted = PL_tainted; + char *name = GvENAME(PL_envgv); + PL_tainted = TRUE; + if (strEQ(name,"ENV")) + /* hash alias */ + taint_proper("%%ENV is aliased to %s%s", "another variable"); + else + /* glob alias: report it in the error message */ + taint_proper("%%ENV is aliased to %%%s%s", name); + /* this statement is reached under -t or -U */ + PL_tainted = was_tainted; + } #ifdef VMS { @@ -129,7 +147,7 @@ Perl_taint_env(pTHX) PL_tainted = was_tainted; if (t < e && isALNUM(*t)) t++; - while (t < e && (isALNUM(*t) || *t == '-' || *t == ':')) + while (t < e && (isALNUM(*t) || strchr("-_.+", *t))) t++; if (t < e) { TAINT;