summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-05-25 21:39:13 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-05-25 21:39:13 +0900
commitac442bc1df2ec26729077ed8d57342cb5c494a21 (patch)
treee702781b3c35375b2c237f0b1cc69bb0c6871562 /mrbgems
parentde48d95c6d0336f4b91bd18adf0a5c4a4ec0a538 (diff)
downloadmruby-ac442bc1df2ec26729077ed8d57342cb5c494a21.tar.gz
mruby-ac442bc1df2ec26729077ed8d57342cb5c494a21.zip
Raise an exception when transfer arguments are too many; fix #3641
The fix was proposed by @block8437. Thank you.
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-fiber/src/fiber.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c
index bd1d09d43..bc1d82bbc 100644
--- a/mrbgems/mruby-fiber/src/fiber.c
+++ b/mrbgems/mruby-fiber/src/fiber.c
@@ -188,9 +188,13 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr
mrb->c->status = resume ? MRB_FIBER_RESUMED : MRB_FIBER_TRANSFERRED;
c->prev = resume ? mrb->c : (c->prev ? c->prev : mrb->root_c);
if (c->status == MRB_FIBER_CREATED) {
- mrb_value *b = c->stack+1;
- mrb_value *e = b + len;
+ mrb_value *b, *e;
+ if (len > c->stend - c->stack) {
+ mrb_raise(mrb, E_FIBER_ERROR, "too many arguments to fiber");
+ }
+ b = c->stack+1;
+ e = b + len;
while (b<e) {
*b++ = *a++;
}