diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-02-04 14:01:22 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-02-04 14:01:22 +0900 |
| commit | 857e384187d8abac2e256f8e97eef3106d982718 (patch) | |
| tree | 7decf3ef46a2b1408c06e1e6ecc768787ea7726a | |
| parent | 33bb4578a2ae15e58cb1270adbe9af36d6436311 (diff) | |
| download | mruby-857e384187d8abac2e256f8e97eef3106d982718.tar.gz mruby-857e384187d8abac2e256f8e97eef3106d982718.zip | |
fibers cannot cross C function boundary; close #1680
| -rw-r--r-- | mrbgems/mruby-fiber/src/fiber.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index 757eb235d..43cf76062 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -218,9 +218,15 @@ static mrb_value fiber_yield(mrb_state *mrb, mrb_value self) { struct mrb_context *c = mrb->c; + mrb_callinfo *ci; mrb_value *a; - int len; + int i, len; + 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->prev) { mrb_raise(mrb, E_ARGUMENT_ERROR, "can't yield from root fiber"); } |
