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.comThread Previous | Thread Next