From ff2ca81bb387ceae24d70a139ec48f227a83be39 Mon Sep 17 00:00:00 2001 From: ko1 Date: Wed, 28 Nov 2012 13:56:29 +0000 Subject: [PATCH] * vm_insnhelper.c (vm_call_method): fix undefined behavior. Should not access scope local variable from outer scope. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37940 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 f677aa3c06..82d7f47106 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Nov 28 22:54:21 2012 Koichi Sasada + + * vm_insnhelper.c (vm_call_method): fix undefined behavior. + Should not access scope local variable from outer scope. + Wed Nov 28 22:20:55 2012 Masaya Tarui * test/ruby/test_thread.rb (test_thread_status_in_trap): change test for diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 89cc0f2394..ab4fb38732 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1698,6 +1698,7 @@ static inline VALUE vm_call_method(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci) { int enable_fastpath = 1; + rb_call_info_t ci_temp; start_method_dispatch: if (ci->me != 0) { @@ -1735,8 +1736,8 @@ vm_call_method(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci) } case VM_METHOD_TYPE_ZSUPER:{ VALUE klass = RCLASS_SUPER(ci->me->klass); - rb_call_info_t cie = *ci; - ci = &cie; + ci_temp = *ci; + ci = &ci_temp; ci->me = rb_method_entry(klass, ci->mid, &ci->defined_class);