X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=taint.c;h=2c2e66e8ecaddee9830c274f5cdf6f786cdf1d11;hb=9df442c23deb1b1ba2f163eb54deeb4fe82ea80c;hp=4ca7ba7d9c83d3bbfb226ee29e7b2fe2c1033c19;hpb=3f774658ecc4b04691265c9db31d70a4a611b290;p=p5sagit%2Fp5-mst-13.2.git diff --git a/taint.c b/taint.c index 4ca7ba7..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. @@ -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 {