develooper Front page | perl.perl5.porters | Postings from April 2000

Re: [ID 20000409.003] Disappearing constant values [PATCH]

Thread Previous | Thread Next
From:
Gurusamy Sarathy
Date:
April 10, 2000 20:58
Subject:
Re: [ID 20000409.003] Disappearing constant values [PATCH]
Message ID:
200004110358.UAA27104@maul.ActiveState.com
On Mon, 10 Apr 2000 21:27:58 MDT, "Eric Blood" wrote:
>Sounds good.  Here's the patch.
>
>--- op.c~ Fri Mar 24 22:24:40 2000
>+++ op.c Mon Apr 10 21:17:16 2000
>@@ -6417,10 +6417,17 @@
>       * for reference counts, sv_upgrade() etc. */
>      if (cSVOP->op_sv) {
>   PADOFFSET ix = pad_alloc(OP_CONST, SVs_PADTMP);
>-  SvREFCNT_dec(PL_curpad[ix]);
>-  SvPADTMP_on(cSVOPo->op_sv);
>-  PL_curpad[ix] = cSVOPo->op_sv;
>-  cSVOPo->op_sv = Nullsv;
>+  if (SvPADTMP(cSVOPo->op_sv)) {
>+    /* If op_sv is already a PADTMP then it is being used by */
>+    /* another pad so make a copy.                           */
>+    sv_setsv(PL_curpad[ix],cSVOPo->op_sv);
>+    SvREADONLY_on(PL_curpad[ix]);

I haven't looked closely, but I'd think we need a couple of lines
here to avoid a scalar leak:

      SvREFCNT_dec(cSVOPo->op_sv);
      cSVOPo->op_sv = Nullsv;

>+  } else {
>+    SvREFCNT_dec(PL_curpad[ix]);
>+    SvPADTMP_on(cSVOPo->op_sv);
>+    PL_curpad[ix] = cSVOPo->op_sv;
>+    cSVOPo->op_sv = Nullsv;
>+  }
>   o->op_targ = ix;
>      }
> #endif

Thanks for the patch.


Sarathy
gsar@ActiveState.com

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About