summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-06-15 22:57:11 +0900
committerYukihiro Matsumoto <[email protected]>2012-06-15 22:57:11 +0900
commit5353b8555cac47f1615899e5622acb411a501eab (patch)
treed57817c1cfb48b3bcbd7b886fa41f2365e977446
parent49133111554a3e0d6a4ff415641cc5ec721d8df4 (diff)
downloadmruby-5353b8555cac47f1615899e5622acb411a501eab.tar.gz
mruby-5353b8555cac47f1615899e5622acb411a501eab.zip
exception jump should not cross mrb_funcall border; close #276
-rw-r--r--src/vm.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/vm.c b/src/vm.c
index 32d2a6a24..826cdafef 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1013,6 +1013,10 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
while (ci[0].ridx == ci[-1].ridx) {
cipop(mrb);
ci = mrb->ci;
+ if (ci->acc < 0) {
+ mrb->jmp = prev_jmp;
+ longjmp(*(jmp_buf*)mrb->jmp, 1);
+ }
while (eidx > mrb->ci->eidx) {
ecall(mrb, --eidx);
}