From: Richard Soderberg Date: Thu, 24 May 2001 08:58:16 +0000 (-0700) Subject: RE: [ID 20010521.003] - [PATCH #2] sv.c: sv_dup_inc(SvRV(sstr)) wasn't checking SvWEAKREF X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ce4ad88136690f3ade0b12df226ab71e108dafdf;p=p5sagit%2Fp5-mst-13.2.git RE: [ID 20010521.003] - [PATCH #2] sv.c: sv_dup_inc(SvRV(sstr)) wasn't checking SvWEAKREF Message-ID: p4raw-id: //depot/perl@10199 --- diff --git a/sv.c b/sv.c index a448938..bbb0d7e 100644 --- a/sv.c +++ b/sv.c @@ -7980,14 +7980,18 @@ Perl_sv_dup(pTHX_ SV *sstr) break; case SVt_RV: SvANY(dstr) = new_XRV(); - SvRV(dstr) = sv_dup_inc(SvRV(sstr)); + SvRV(dstr) = SvWEAKREF(SvRV(sstr)) + ? sv_dup_inc(SvRV(sstr)) + : sv_dup(SvRV(sstr)); break; case SVt_PV: SvANY(dstr) = new_XPV(); SvCUR(dstr) = SvCUR(sstr); SvLEN(dstr) = SvLEN(sstr); if (SvROK(sstr)) - SvRV(dstr) = sv_dup_inc(SvRV(sstr)); + SvRV(dstr) = SvWEAKREF(SvRV(sstr)) + ? sv_dup_inc(SvRV(sstr)) + : sv_dup(SvRV(sstr)); else if (SvPVX(sstr) && SvLEN(sstr)) SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1); else @@ -7999,7 +8003,9 @@ Perl_sv_dup(pTHX_ SV *sstr) SvLEN(dstr) = SvLEN(sstr); SvIVX(dstr) = SvIVX(sstr); if (SvROK(sstr)) - SvRV(dstr) = sv_dup_inc(SvRV(sstr)); + SvRV(dstr) = SvWEAKREF(SvRV(sstr)) + ? sv_dup_inc(SvRV(sstr)) + : sv_dup(SvRV(sstr)); else if (SvPVX(sstr) && SvLEN(sstr)) SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1); else @@ -8012,7 +8018,9 @@ Perl_sv_dup(pTHX_ SV *sstr) SvIVX(dstr) = SvIVX(sstr); SvNVX(dstr) = SvNVX(sstr); if (SvROK(sstr)) - SvRV(dstr) = sv_dup_inc(SvRV(sstr)); + SvRV(dstr) = SvWEAKREF(SvRV(sstr)) + ? sv_dup_inc(SvRV(sstr)) + : sv_dup(SvRV(sstr)); else if (SvPVX(sstr) && SvLEN(sstr)) SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1); else @@ -8027,7 +8035,9 @@ Perl_sv_dup(pTHX_ SV *sstr) SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr)); SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr)); if (SvROK(sstr)) - SvRV(dstr) = sv_dup_inc(SvRV(sstr)); + SvRV(dstr) = SvWEAKREF(SvRV(sstr)) + ? sv_dup_inc(SvRV(sstr)) + : sv_dup(SvRV(sstr)); else if (SvPVX(sstr) && SvLEN(sstr)) SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1); else @@ -8042,7 +8052,9 @@ Perl_sv_dup(pTHX_ SV *sstr) SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr)); SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr)); if (SvROK(sstr)) - SvRV(dstr) = sv_dup_inc(SvRV(sstr)); + SvRV(dstr) = SvWEAKREF(SvRV(sstr)) + ? sv_dup_inc(SvRV(sstr)) + : sv_dup(SvRV(sstr)); else if (SvPVX(sstr) && SvLEN(sstr)) SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1); else @@ -8060,7 +8072,9 @@ Perl_sv_dup(pTHX_ SV *sstr) SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr)); SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr)); if (SvROK(sstr)) - SvRV(dstr) = sv_dup_inc(SvRV(sstr)); + SvRV(dstr) = SvWEAKREF(SvRV(sstr)) + ? sv_dup_inc(SvRV(sstr)) + : sv_dup(SvRV(sstr)); else if (SvPVX(sstr) && SvLEN(sstr)) SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1); else @@ -8091,7 +8105,9 @@ Perl_sv_dup(pTHX_ SV *sstr) SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr)); SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr)); if (SvROK(sstr)) - SvRV(dstr) = sv_dup_inc(SvRV(sstr)); + SvRV(dstr) = SvWEAKREF(SvRV(sstr)) + ? sv_dup_inc(SvRV(sstr)) + : sv_dup(SvRV(sstr)); else if (SvPVX(sstr) && SvLEN(sstr)) SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1); else @@ -8112,7 +8128,9 @@ Perl_sv_dup(pTHX_ SV *sstr) SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr)); SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr)); if (SvROK(sstr)) - SvRV(dstr) = sv_dup_inc(SvRV(sstr)); + SvRV(dstr) = SvWEAKREF(SvRV(sstr)) + ? sv_dup_inc(SvRV(sstr)) + : sv_dup(SvRV(sstr)); else if (SvPVX(sstr) && SvLEN(sstr)) SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1); else