summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authornanami <[email protected]>2013-12-15 22:25:59 +0800
committernanami <[email protected]>2013-12-15 22:25:59 +0800
commit87a392067a831dae3e4afdb23b99e13a6d424a3b (patch)
treeb1a37312fbdb54b05f3ddd15bb7803b8a82bdf0d /src/vm.c
parent882afdea20f344c2a3ed4842a6269fe2b8922493 (diff)
downloadmruby-87a392067a831dae3e4afdb23b99e13a6d424a3b.tar.gz
mruby-87a392067a831dae3e4afdb23b99e13a6d424a3b.zip
Fixed callinfo buffer overflow while calling ensure handlers
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c8
1 files changed, 5 insertions, 3 deletions
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;