Following on from commit
935647290357b277, which corrected the beha-
viour for tied globs, this commit corrects the behaviour for refer-
ences to tied globs.
(With tests by Nicholas Clark.)
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();
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();
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();
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();
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) ) {
chdir 't' if -d 't';
@INC = '../lib';
require './test.pl';
- plan (tests => 223);
+ plan (tests => 226);
}
use strict;
$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';
###############################################