From: Mark Mielke Date: Mon, 20 Jan 2003 19:56:13 +0000 (-0500) Subject: PATCH: sv_rvweaken() deficiency (against 5.8.0) X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=d91d49e893f41bf2ce59ca71dfaeeb27d6b2cfa0;p=p5sagit%2Fp5-mst-13.2.git PATCH: sv_rvweaken() deficiency (against 5.8.0) Message-ID: <20030121005613.GA31739@mark.mielke.cc> p4raw-id: //depot/perl@18691 --- diff --git a/sv.c b/sv.c index 52a629c..6c8eb65 100644 --- a/sv.c +++ b/sv.c @@ -4964,7 +4964,19 @@ S_sv_add_backref(pTHX_ SV *tsv, SV *sv) sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0); SvREFCNT_dec(av); /* for sv_magic */ } - av_push(av,sv); + if (AvFILLp(av) >= AvMAX(av)) { + SV **svp = AvARRAY(av); + I32 i = AvFILLp(av); + while (i >= 0) { + if (svp[i] == &PL_sv_undef) { + svp[i] = sv; /* reuse the slot */ + return; + } + i--; + } + av_extend(av, AvFILLp(av)+1); + } + AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */ } /* delete a back-reference to ourselves from the backref magic associated