diff options
Diffstat (limited to 'lang/perl5.12/files/patch-sv.c')
-rw-r--r-- | lang/perl5.12/files/patch-sv.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lang/perl5.12/files/patch-sv.c b/lang/perl5.12/files/patch-sv.c new file mode 100644 index 000000000000..aeb160db81bd --- /dev/null +++ b/lang/perl5.12/files/patch-sv.c @@ -0,0 +1,21 @@ +--- sv.c ++++ sv.c +@@ -9813,7 +9813,8 @@ Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param) + IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(dstr)); + break; + case SVt_PVAV: +- if (AvARRAY((AV*)sstr)) { ++ /* avoid cloning an empty array */ ++ if (AvARRAY((AV*)sstr) && AvFILLp((AV*)sstr >= 0) { + SV **dst_ary, **src_ary; + SSize_t items = AvFILLp((AV*)sstr) + 1; + +@@ -9838,6 +9839,8 @@ Perl_sv_dup(pTHX_ SV *sstr, CLONE_PARAMS* param) + else { + SvPV_set(dstr, NULL); + AvALLOC((AV*)dstr) = (SV**)NULL; ++ AvMAX( (AV *)dstr) = -1; ++ AvFILLp((AV *)dstr) = -1; + } + AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr), param); + break; |