From 6c299aae67e2e0f13a470b855298bc1efb43387a Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 7 Nov 2016 00:44:08 +0900 Subject: fixed wrong stack adjustment for ensure clauses; fix #3175 --- src/vm.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index fcc69a1f9..a7418e6e7 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1513,6 +1513,7 @@ RETRY_TRY_BLOCK: /* A B return R(A) (B=normal,in-block return/break) */ if (mrb->exc) { mrb_callinfo *ci; + mrb_value *stk; int eidx; L_RAISE: @@ -1524,6 +1525,7 @@ RETRY_TRY_BLOCK: if (ci->ridx == 0) goto L_STOP; goto L_RESCUE; } + stk = mrb->c->stack; while (ci[0].ridx == ci[-1].ridx) { cipop(mrb); ci = mrb->c->ci; @@ -1533,6 +1535,7 @@ RETRY_TRY_BLOCK: MRB_THROW(prev_jmp); } if (ci == mrb->c->cibase) { + mrb->c->stack = stk; while (eidx > 0) { ecall(mrb, --eidx); } -- cgit v1.2.3