diff options
author | Salvador FandiƱo <sfandino@yahoo.com> | 2005-09-18 23:56:39 -0700 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2005-09-20 09:02:17 +0000 |
commit | c127bd3aaa5c5e270737ea0eab0c61722c32271e (patch) | |
tree | b75f299c9bc0936df0f022b002efeec28dd41dcc /pp_ctl.c | |
parent | 96021e8787003786059541add9ccb61ad6d9f5db (diff) | |
download | perl-c127bd3aaa5c5e270737ea0eab0c61722c32271e.tar.gz |
PATCH for #37138: using XSUB as DB::DB causes perl to crash
Message-ID: <20050919135639.96726.qmail@web52701.mail.yahoo.com>
(adapted to bleadperl)
p4raw-id: //depot/perl@25511
Diffstat (limited to 'pp_ctl.c')
-rw-r--r-- | pp_ctl.c | 25 |
1 files changed, 18 insertions, 7 deletions
@@ -1771,13 +1771,24 @@ PP(pp_dbstate) hasargs = 0; SPAGAIN; - PUSHBLOCK(cx, CXt_SUB, SP); - PUSHSUB_DB(cx); - cx->blk_sub.retop = PL_op->op_next; - CvDEPTH(cv)++; - SAVECOMPPAD(); - PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1); - RETURNOP(CvSTART(cv)); + if (CvXSUB(cv)) { + CvDEPTH(cv)++; + PUSHMARK(SP); + (void)(*CvXSUB(cv))(aTHX_ cv); + CvDEPTH(cv)--; + FREETMPS; + LEAVE; + return NORMAL; + } + else { + PUSHBLOCK(cx, CXt_SUB, SP); + PUSHSUB_DB(cx); + cx->blk_sub.retop = PL_op->op_next; + CvDEPTH(cv)++; + SAVECOMPPAD(); + PAD_SET_CUR_NOSAVE(CvPADLIST(cv), 1); + RETURNOP(CvSTART(cv)); + } } else return NORMAL; |