In perl_clone_using(), use sv_dup_inc_multiple() to clone the temps stack.
Nicholas Clark [Tue, 19 May 2009 08:15:46 +0000 (09:15 +0100)]
Avoid using Newxz() to zero allocate memory we will immediately overwrite.

sv.c

diff --git a/sv.c b/sv.c
index c7468ec..6e7fbd4 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -12205,12 +12205,9 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
        PL_tmps_ix              = proto_perl->Itmps_ix;
        PL_tmps_max             = proto_perl->Itmps_max;
        PL_tmps_floor           = proto_perl->Itmps_floor;
-       Newxz(PL_tmps_stack, PL_tmps_max, SV*);
-       i = 0;
-       while (i <= PL_tmps_ix) {
-           PL_tmps_stack[i]    = sv_dup_inc(proto_perl->Itmps_stack[i], param);
-           ++i;
-       }
+       Newx(PL_tmps_stack, PL_tmps_max, SV*);
+       sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack, PL_tmps_ix,
+                           param);
 
        /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
        i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;