diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2003-10-27 19:33:29 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2003-10-27 19:33:29 +0000 |
commit | c038024b577f2d327a253e9cab04220b888a4e11 (patch) | |
tree | 7323913f0cf17026dcce22cc653d4e813c1394ea /taint.c | |
parent | f9c83c4111111c281c2aa7b6ba5e0bb5dd3348cd (diff) | |
download | perl-c038024b577f2d327a253e9cab04220b888a4e11.tar.gz |
Add a new taint error, "%ENV is aliased to %s".
This error is thrown when taint checks are enabled and
when *ENV has been aliased, so that %ENV has no env-magic
anymore. (see bug [perl #24291].)
p4raw-id: //depot/perl@21563
Diffstat (limited to 'taint.c')
-rw-r--r-- | taint.c | 28 |
1 files changed, 20 insertions, 8 deletions
@@ -80,9 +80,25 @@ Perl_taint_env(pTHX) NULL }; - /* Don't bother if there's no %ENV hash */ - if (!PL_envgv || !GvHV(PL_envgv)) + /* 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 { @@ -99,9 +115,7 @@ Perl_taint_env(pTHX) TAINT; taint_proper("Insecure %s%s", "$ENV{DCL$PATH}"); } - if (SvMAGICAL(*svp) - && (mg = mg_find(*svp, PERL_MAGIC_envelem)) - && MgTAINTEDDIR(mg)) { + if ((mg = mg_find(*svp, PERL_MAGIC_envelem)) && MgTAINTEDDIR(mg)) { TAINT; taint_proper("Insecure directory in %s%s", "$ENV{DCL$PATH}"); } @@ -116,9 +130,7 @@ Perl_taint_env(pTHX) TAINT; taint_proper("Insecure %s%s", "$ENV{PATH}"); } - if (SvMAGICAL(*svp) - && (mg = mg_find(*svp, PERL_MAGIC_envelem)) - && MgTAINTEDDIR(mg)) { + if ((mg = mg_find(*svp, PERL_MAGIC_envelem)) && MgTAINTEDDIR(mg)) { TAINT; taint_proper("Insecure directory in %s%s", "$ENV{PATH}"); } |