summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-02-04 14:07:33 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-02-04 14:10:39 +0900
commitbf4e79cc62af809138bc7db7e54ece67080b5fa8 (patch)
treec3e17c1ebda7b08b977bd8397c5f822469900bb8 /src/kernel.c
parent8f52b88ee75fb3ca62931a1d3975c9cd78eae2d8 (diff)
downloadmruby-bf4e79cc62af809138bc7db7e54ece67080b5fa8.tar.gz
mruby-bf4e79cc62af809138bc7db7e54ece67080b5fa8.zip
`argv` may be modified when `mrb_funcall()` is called; fix #3419
Calling `mrb_funcall()` and `mrb_yield()` (and their related functions) are discouraged unless absolutely necessary, because it can cause this kind of issues very easily.
Diffstat (limited to 'src/kernel.c')
-rw-r--r--src/kernel.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/kernel.c b/src/kernel.c
index 76bd59469..5ca1736c3 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -445,8 +445,11 @@ mrb_obj_extend_m(mrb_state *mrb, mrb_value self)
{
mrb_value *argv;
mrb_int argc;
+ mrb_value args;
mrb_get_args(mrb, "*", &argv, &argc);
+ args = mrb_ary_new_from_values(mrb, argc, argv);
+ argv = (mrb_value*)RARRAY_PTR(args);
return mrb_obj_extend(mrb, argc, argv, self);
}