diff options
author | Niko Tyni <ntyni@debian.org> | 2010-11-13 00:02:07 +0200 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2010-11-14 16:52:23 -0800 |
commit | 125b9982af05cc67a7f8daefd5060a9eb9524824 (patch) | |
tree | df0d7e0e78095a25e83cae94af54a54302f342fc /mg.c | |
parent | 99e6ea262e0d5e6a5eea5692f2b99d422027c0a4 (diff) | |
download | perl-125b9982af05cc67a7f8daefd5060a9eb9524824.tar.gz |
Implement $^A tainting
The format accumulator $^A now becomes tainted when formline() is
called with tainted data.
There is still one failing test from the TODO set; it seems
that the $^A get magic is handled too late for the taintedness
to show up.
Diffstat (limited to 'mg.c')
-rw-r--r-- | mg.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -809,6 +809,8 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) switch (*mg->mg_ptr) { case '\001': /* ^A */ sv_setsv(sv, PL_bodytarget); + if (SvTAINTED(PL_bodytarget)) + SvTAINTED_on(sv); break; case '\003': /* ^C, ^CHILD_ERROR_NATIVE */ if (nextchar == '\0') { @@ -2395,6 +2397,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) const char * const remaining = mg->mg_ptr + 1; I32 i; STRLEN len; + MAGIC *tmg; PERL_ARGS_ASSERT_MAGIC_SET; @@ -2431,6 +2434,13 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) break; case '\001': /* ^A */ sv_setsv(PL_bodytarget, sv); + /* mg_set() has temporarily made sv non-magical */ + if (PL_tainting) { + if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1) + SvTAINTED_on(PL_bodytarget); + else + SvTAINTED_off(PL_bodytarget); + } break; case '\003': /* ^C */ PL_minus_c = cBOOL(SvIV(sv)); |