From 87a392067a831dae3e4afdb23b99e13a6d424a3b Mon Sep 17 00:00:00 2001 From: nanami Date: Sun, 15 Dec 2013 22:25:59 +0800 Subject: Fixed callinfo buffer overflow while calling ensure handlers --- src/vm.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index 0d6318685..60933d8f3 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1287,10 +1287,12 @@ mrb_context_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int mrb->jmp = prev_jmp; mrb_longjmp(mrb); } - while (eidx > ci[-1].eidx) { - ecall(mrb, --eidx); + if (ci > mrb->c->cibase) { + while (eidx > ci[-1].eidx) { + ecall(mrb, --eidx); + } } - if (ci == mrb->c->cibase) { + else if (ci == mrb->c->cibase) { if (ci->ridx == 0) { regs = mrb->c->stack = mrb->c->stbase; goto L_STOP; -- cgit v1.2.3