From 857e384187d8abac2e256f8e97eef3106d982718 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 4 Feb 2014 14:01:22 +0900 Subject: fibers cannot cross C function boundary; close #1680 --- mrbgems/mruby-fiber/src/fiber.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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"); } -- cgit v1.2.3