From: Radu Greab Date: Fri, 2 Nov 2001 15:28:58 +0000 (+0200) Subject: Re: [ID 20011101.069] \stat('.') gives "Attempt to free unreferenced scalar" X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=58d9517576e61e077f66c327ee4c44c5d9bbf1a7;p=p5sagit%2Fp5-mst-13.2.git Re: [ID 20011101.069] \stat('.') gives "Attempt to free unreferenced scalar" Message-ID: <15330.40858.629851.468818@ix.netsoft.ro> p4raw-id: //depot/perl@12811 --- diff --git a/op.c b/op.c index 4740afd..4b00e0f 100644 --- a/op.c +++ b/op.c @@ -1670,19 +1670,22 @@ Perl_mod(pTHX_ OP *o, I32 type) goto nomod; break; /* mod()ing was handled by ck_return() */ } - if (type != OP_LEAVESUBLV) - o->op_flags |= OPf_MOD; - - if (type == OP_AASSIGN || type == OP_SASSIGN) - o->op_flags |= OPf_SPECIAL|OPf_REF; - else if (!type) { - o->op_private |= OPpLVAL_INTRO; - o->op_flags &= ~OPf_SPECIAL; - PL_hints |= HINT_BLOCK_SCOPE; + if (type != OP_REFGEN || + PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)) { + if (type != OP_LEAVESUBLV) + o->op_flags |= OPf_MOD; + + if (type == OP_AASSIGN || type == OP_SASSIGN) + o->op_flags |= OPf_SPECIAL|OPf_REF; + else if (!type) { + o->op_private |= OPpLVAL_INTRO; + o->op_flags &= ~OPf_SPECIAL; + PL_hints |= HINT_BLOCK_SCOPE; + } + else if (type != OP_GREPSTART && type != OP_ENTERSUB + && type != OP_LEAVESUBLV) + o->op_flags |= OPf_REF; } - else if (type != OP_GREPSTART && type != OP_ENTERSUB - && type != OP_LEAVESUBLV) - o->op_flags |= OPf_REF; return o; } diff --git a/t/op/stat.t b/t/op/stat.t index dc47ef3..8d0ca19 100755 --- a/t/op/stat.t +++ b/t/op/stat.t @@ -9,7 +9,7 @@ BEGIN { use Config; -print "1..58\n"; +print "1..59\n"; $Is_MSWin32 = $^O eq 'MSWin32'; $Is_NetWare = $^O eq 'NetWare'; @@ -281,3 +281,7 @@ if (-f) {print "ok 57\n";} else {print "not ok 57\n";} if (-f()) {print "ok 58\n";} else {print "not ok 58\n";} unlink 'Op.stat.tmp' or print "# unlink failed: $!\n"; + +# bug id 20011101.069 +my @r = \stat("."); +if (@r == 13) { print "ok 59\n" } else { print "not ok 59\n" }