hash assign in list context should copy key as well
authorRuslan Zakirov <ruz@bestpractical.com>
Mon, 8 Oct 2012 18:50:50 +0000 (22:50 +0400)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 11 Dec 2012 16:59:40 +0000 (08:59 -0800)
if we don't then returned keys are aliases for RHS
values and can result in unexpected changes

pp_hot.c

index 54f1eec..47b3a7b 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1086,7 +1086,7 @@ PP(pp_aassign)
                while (relem < lastrelem) {     /* gobble up all the rest */
                    HE *didstore;
                    ODD:
-                   sv = *relem ? *relem : &PL_sv_no;
+                   sv = *relem ? gimme == G_ARRAY ? sv_mortalcopy(*relem) : *relem : &PL_sv_no;
                    relem++;
                    tmpstr = sv_newmortal();
                    if (*relem)