summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-02 15:23:49 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-09-02 15:23:49 +0000
commit095ae8fd8420e3386f5c4da72653e340b27c29c9 (patch)
treedb4c70dd95fffb574d2f33b3866a13986b96842c
parent41e1933fd8df02d3244aa477f4f5a78d7ff12e65 (diff)
* 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
-rw-r--r--ChangeLog5
-rw-r--r--vm_insnhelper.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 8eeb8ffbf4..a77d23b32c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Sep 3 00:23:25 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * 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 <akr@fsij.org>
* transcode_data.h (base_element): removed.
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;
}