From 39e1ad85b8062369b2b64cd49b203ef9ea7f6ebc Mon Sep 17 00:00:00 2001 From: "Paul \"LeoNerd\" Evans" Date: Mon, 13 Feb 2023 16:03:04 +0000 Subject: Ensure that sv_dup() handles new class structures It needs to: * clone SVt_PVOBJ instances * clone the xhv_class_* fields of an SVt_PVHV * clone the PadnameFIELDINFO structure of a padname --- pad.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'pad.c') diff --git a/pad.c b/pad.c index 2587e43818..4b75998cac 100644 --- a/pad.c +++ b/pad.c @@ -2864,6 +2864,16 @@ Perl_padname_dup(pTHX_ PADNAME *src, CLONE_PARAMS *param) PadnameTYPE (dst) = (HV *)sv_dup_inc((SV *)PadnameTYPE(src), param); PadnameOURSTASH(dst) = (HV *)sv_dup_inc((SV *)PadnameOURSTASH(src), param); + if(PadnameIsFIELD(src)) { + struct padname_fieldinfo *sinfo = PadnameFIELDINFO(src); + struct padname_fieldinfo *dinfo; + Newxz(dinfo, 1, struct padname_fieldinfo); + + dinfo->fieldix = sinfo->fieldix; + dinfo->fieldstash = hv_dup_inc(sinfo->fieldstash, param); + + PadnameFIELDINFO(dst) = dinfo; + } dst->xpadn_low = src->xpadn_low; dst->xpadn_high = src->xpadn_high; dst->xpadn_gen = src->xpadn_gen; -- cgit v1.2.1