diff options
| -rw-r--r-- | mrbgems/mruby-fiber/src/fiber.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index 0dbdad871..f2916e209 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -154,7 +154,13 @@ fiber_resume(mrb_state *mrb, mrb_value self) struct mrb_context *c = fiber_check(mrb, self); mrb_value *a; int len; + mrb_callinfo *ci; + for (ci = c->ci; ci >= c->cibase; ci--) { + if (ci->acc < 0) { + mrb_raise(mrb, E_ARGUMENT_ERROR, "can't cross C function boundary"); + } + } if (c->status == MRB_FIBER_RESUMED) { mrb_raise(mrb, E_RUNTIME_ERROR, "double resume"); } |
