diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-02 15:23:49 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-02 15:23:49 +0000 |
commit | 095ae8fd8420e3386f5c4da72653e340b27c29c9 (patch) | |
tree | db4c70dd95fffb574d2f33b3866a13986b96842c /vm_insnhelper.c | |
parent | 41e1933fd8df02d3244aa477f4f5a78d7ff12e65 (diff) | |
download | ruby-095ae8fd8420e3386f5c4da72653e340b27c29c9.tar.gz |
* vm_insnhelper.c (vm_method_missing): copy arguments to allocated
memory from machine stack. [ruby-dev:36064]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r-- | vm_insnhelper.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c index abf74d7491..cfac3a4dce 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -410,13 +410,14 @@ vm_method_missing(rb_thread_t *th, ID id, VALUE recv, int num, rb_block_t *blockptr, int opt) { rb_control_frame_t * const reg_cfp = th->cfp; - VALUE *argv = STACK_ADDR_FROM_TOP(num + 1); + VALUE *argv = ALLOCA_N(VALUE, num + 1); + MEMCPY(argv, STACK_ADDR_FROM_TOP(num + 1), VALUE, num + 1); VALUE val; argv[0] = ID2SYM(id); th->method_missing_reason = opt; th->passed_block = blockptr; - val = rb_funcall2(recv, idMethodMissing, num + 1, argv); POPN(num + 1); + val = rb_funcall2(recv, idMethodMissing, num + 1, argv); return val; } |