From 8dbd427ae9f0c84746421032b5f4eb9750f5b895 Mon Sep 17 00:00:00 2001 From: mame Date: Tue, 2 Sep 2008 15:23:49 +0000 Subject: * vm_insnhelper.c (vm_method_missing): copy arguments to allocated memory from machine stack. [ruby-dev:36064] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@19072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ vm_insnhelper.c | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8eeb8ffbf..a77d23b32 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Sep 3 00:23:25 2008 Yusuke Endoh + + * vm_insnhelper.c (vm_method_missing): copy arguments to allocated + memory from machine stack. [ruby-dev:36064] + Tue Sep 2 22:20:26 2008 Tanaka Akira * transcode_data.h (base_element): removed. diff --git a/vm_insnhelper.c b/vm_insnhelper.c index abf74d749..cfac3a4dc 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; } -- cgit