diff options
-rw-r--r-- | doio.c | 18 | ||||
-rw-r--r-- | pp_sys.c | 12 | ||||
-rw-r--r-- | t/op/tie_fetch_count.t | 8 |
3 files changed, 10 insertions, 28 deletions
@@ -1619,10 +1619,7 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp) tot = sp - mark; while (++mark <= sp) { GV* gv; - SvGETMAGIC(*mark); - if (isGV_with_GP(*mark)) { - gv = MUTABLE_GV(*mark); - do_fchmod: + if ((gv = MAYBE_DEREF_GV(*mark))) { if (GvIO(gv) && IoIFP(GvIOp(gv))) { #ifdef HAS_FCHMOD APPLY_TAINT_PROPER(); @@ -1636,10 +1633,6 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp) tot--; } } - else if (SvROK(*mark) && isGV_with_GP(SvRV(*mark))) { - gv = MUTABLE_GV(SvRV(*mark)); - goto do_fchmod; - } else { const char *name = SvPV_nomg_const_nolen(*mark); APPLY_TAINT_PROPER(); @@ -1660,10 +1653,7 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp) tot = sp - mark; while (++mark <= sp) { GV* gv; - SvGETMAGIC(*mark); - if (isGV_with_GP(*mark)) { - gv = MUTABLE_GV(*mark); - do_fchown: + if ((gv = MAYBE_DEREF_GV(*mark))) { if (GvIO(gv) && IoIFP(GvIOp(gv))) { #ifdef HAS_FCHOWN APPLY_TAINT_PROPER(); @@ -1677,10 +1667,6 @@ Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp) tot--; } } - else if (SvROK(*mark) && isGV_with_GP(SvRV(*mark))) { - gv = MUTABLE_GV(SvRV(*mark)); - goto do_fchown; - } else { const char *name = SvPV_nomg_const_nolen(*mark); APPLY_TAINT_PROPER(); @@ -3466,18 +3466,8 @@ PP(pp_chdir) if (PL_op->op_flags & OPf_SPECIAL) { gv = gv_fetchsv(sv, 0, SVt_PVIO); } - else { - SvGETMAGIC(sv); - if(isGV_with_GP(sv)) { - gv = MUTABLE_GV(sv); - } - else if (SvROK(sv) && isGV_with_GP(SvRV(sv))) { - gv = MUTABLE_GV(SvRV(sv)); - } - else { + else if (!(gv = MAYBE_DEREF_GV(sv))) tmps = SvPV_nomg_const_nolen(sv); - } - } } if( !gv && (!tmps || !*tmps) ) { diff --git a/t/op/tie_fetch_count.t b/t/op/tie_fetch_count.t index d55ab5099e..b62f66d1bc 100644 --- a/t/op/tie_fetch_count.t +++ b/t/op/tie_fetch_count.t @@ -7,7 +7,7 @@ BEGIN { chdir 't' if -d 't'; @INC = '../lib'; require './test.pl'; - plan (tests => 223); + plan (tests => 226); } use strict; @@ -222,9 +222,15 @@ $var8->bolgy ; check_count '->method'; $var8 = *dummy; $dummy = $var8; $count = 0; eval { chdir $var8 } ; check_count 'chdir $tied_glob'; $var8 = *dummy; $dummy = $var8; $count = 0; +eval { chdir \$var8 } ; check_count 'chdir \$tied_glob'; +$var8 = *dummy; $dummy = $var8; $count = 0; eval { chmod 0, $var8 } ; check_count 'chmod 0,$tied_glob'; $var8 = *dummy; $dummy = $var8; $count = 0; +eval { chmod 0,\$var8 } ; check_count 'chmod 0,\$tied_glob'; +$var8 = *dummy; $dummy = $var8; $count = 0; eval { chown 0,0,$var8 }; check_count 'chown 0,0,$tied_glob'; +$var8 = *dummy; $dummy = $var8; $count = 0; +eval { chown 0,0,\$var8}; check_count 'chown 0,0,\$tied_glob'; ############################################### |