summaryrefslogtreecommitdiff
path: root/pp_hot.c
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2012-09-22 07:12:04 -0700
committerFather Chrysostomos <sprout@cpan.org>2012-09-22 17:10:43 -0700
commit9c744f4f4d7678009336db8141276918751b7c52 (patch)
tree75b79c1eeb5294e13a51da94de00ce1244d0750b /pp_hot.c
parent895cdc83ca4f8ad093074b3bd5d0fbc1d09f7628 (diff)
downloadperl-9c744f4f4d7678009336db8141276918751b7c52.tar.gz
Stop hash assignment from leaking on croak
Diffstat (limited to 'pp_hot.c')
-rw-r--r--pp_hot.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/pp_hot.c b/pp_hot.c
index 827395f87c..6057614f45 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1013,7 +1013,7 @@ PP(pp_aassign)
HE *didstore;
sv = *relem ? *relem : &PL_sv_no;
relem++;
- tmpstr = newSV(0);
+ tmpstr = sv_newmortal();
if (*relem)
sv_setsv(tmpstr,*relem); /* value */
relem++;
@@ -1030,11 +1030,10 @@ PP(pp_aassign)
}
}
didstore = hv_store_ent(hash,sv,tmpstr,0);
+ if (didstore) SvREFCNT_inc_simple_void_NN(tmpstr);
if (magic) {
if (SvSMAGICAL(tmpstr))
mg_set(tmpstr);
- if (!didstore)
- sv_2mortal(tmpstr);
}
TAINT_NOT;
}