summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-03-05 15:38:13 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-03-05 15:38:13 +0900
commit865b850b76a56352abe596bd31311d41a58b37fa (patch)
treee30a4b0de91cfe1219ecc186b066ffc46b1207a1
parentf911b23599697f79f922f09640cf86ddd2b8602f (diff)
downloadmruby-865b850b76a56352abe596bd31311d41a58b37fa.tar.gz
mruby-865b850b76a56352abe596bd31311d41a58b37fa.zip
should check crossing C boudary from resume
-rw-r--r--mrbgems/mruby-fiber/src/fiber.c6
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");
}