summaryrefslogtreecommitdiff
path: root/pp_ctl.c
diff options
context:
space:
mode:
authorSalvador FandiƱo <sfandino@yahoo.com>2005-09-18 23:56:39 -0700
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2005-09-20 09:02:17 +0000
commitc127bd3aaa5c5e270737ea0eab0c61722c32271e (patch)
treeb75f299c9bc0936df0f022b002efeec28dd41dcc /pp_ctl.c
parent96021e8787003786059541add9ccb61ad6d9f5db (diff)
downloadperl-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.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/pp_ctl.c b/pp_ctl.c
index 0e31353d09..12e49ec33a 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -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;