diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-05 15:38:13 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-05 15:38:13 +0900 |
| commit | 865b850b76a56352abe596bd31311d41a58b37fa (patch) | |
| tree | e30a4b0de91cfe1219ecc186b066ffc46b1207a1 | |
| parent | f911b23599697f79f922f09640cf86ddd2b8602f (diff) | |
| download | mruby-865b850b76a56352abe596bd31311d41a58b37fa.tar.gz mruby-865b850b76a56352abe596bd31311d41a58b37fa.zip | |
should check crossing C boudary from resume
| -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"); } |
