summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Holzman <bah@ecnvantage.com>2000-11-25 21:42:34 -0500
committerJarkko Hietaniemi <jhi@iki.fi>2000-11-26 18:31:12 +0000
commit4c8f17b905f2c0cd6339fc4fe5f0be6be15f3434 (patch)
treed657aa80f9a707a7310a8f046a43b651bb70514c
parent09d7a2f981f65aa2b3e19acb026791af31c51942 (diff)
downloadperl-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.c3
-rwxr-xr-xt/op/array.t7
2 files changed, 8 insertions, 2 deletions
diff --git a/sv.c b/sv.c
index 1720101a83..be1947ac02 100644
--- a/sv.c
+++ b/sv.c
@@ -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";