diff options
author | Benjamin Holzman <bah@ecnvantage.com> | 2000-11-25 21:42:34 -0500 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2000-11-26 18:31:12 +0000 |
commit | 4c8f17b905f2c0cd6339fc4fe5f0be6be15f3434 (patch) | |
tree | d657aa80f9a707a7310a8f046a43b651bb70514c | |
parent | 09d7a2f981f65aa2b3e19acb026791af31c51942 (diff) | |
download | perl-4c8f17b905f2c0cd6339fc4fe5f0be6be15f3434.tar.gz |
Re: [PATCH: perl@7825] SvTEMP-ness on rhs of aassign can wreak havoc
Message-ID: <20001126024234.G25040@ecnvantage.com>
Patch for the bug 20000212.002.
p4raw-id: //depot/perl@7867
-rw-r--r-- | sv.c | 3 | ||||
-rwxr-xr-x | t/op/array.t | 7 |
2 files changed, 8 insertions, 2 deletions
@@ -2860,7 +2860,8 @@ Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr) if (SvTEMP(sstr) && /* slated for free anyway? */ SvREFCNT(sstr) == 1 && /* and no other references to it? */ !(sflags & SVf_OOK) && /* and not involved in OOK hack? */ - SvLEN(sstr)) /* and really is a string */ + SvLEN(sstr) && /* and really is a string */ + !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */ { if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */ if (SvOOK(dstr)) { diff --git a/t/op/array.t b/t/op/array.t index 7cc84e3217..d48b5fbfa0 100755 --- a/t/op/array.t +++ b/t/op/array.t @@ -1,6 +1,6 @@ #!./perl -print "1..70\n"; +print "1..71\n"; # # @foo, @bar, and @ary are also used from tie-stdarray after tie-ing them @@ -229,3 +229,8 @@ print "ok 69\n"; print "not " unless unshift(@ary,12) == 5; print "ok 70\n"; + +sub foo { "a" } +@foo=(foo())[0,0]; +$foo[1] eq "a" or print "not "; +print "ok 71\n"; |