From: hanachin@... Date: 2015-03-05T17:14:45+00:00 Subject: [ruby-core:68434] [Ruby trunk - Bug #10847] SystemStackError after NameError prepends a module Issue #10847 has been updated by Seiei Higa. How to reproduce: 1. prepend Module to the class 2. call the method that calls cfunc `rb_call_super` The following code causes SystemStackError too, because `Float#numerator` calls `rb_call_super`. ```ruby module M; end Float.prepend M 0.3.numerator ``` I wrote a patch for this issue. ```diff diff --git vm_eval.c vm_eval.c index 6eeee5f..4039b6c 100644 --- vm_eval.c +++ vm_eval.c @@ -273,7 +273,8 @@ vm_call_super(rb_thread_t *th, int argc, const VALUE *argv) rb_bug("vm_call_super: should not be reached"); } - klass = RCLASS_SUPER(cfp->klass); + klass = RCLASS_ORIGIN(cfp->klass); + klass = RCLASS_SUPER(klass); id = cfp->me->def->original_id; me = rb_method_entry(klass, id, &klass); if (!me) { ``` ---------------------------------------- Bug #10847: SystemStackError after NameError prepends a module https://bugs.ruby-lang.org/issues/10847#change-51780 * Author: Yuki Nishijima * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- The following code causes `SystemStackError`. ```ruby module Foo end NameError.prepend Foo foo rescue $! ``` And here is the full backtrace: ``` system_stack_error_from_name_error.rb:3:in `initialize': stack level too deep (SystemStackError) from system_stack_error_from_name_error.rb:3:in `initialize' from system_stack_error_from_name_error.rb:3:in `initialize' from system_stack_error_from_name_error.rb:3:in `initialize' from system_stack_error_from_name_error.rb:3:in `initialize' from system_stack_error_from_name_error.rb:3:in `initialize' from system_stack_error_from_name_error.rb:3:in `initialize' from system_stack_error_from_name_error.rb:3:in `initialize' from system_stack_error_from_name_error.rb:3:in `initialize' ... 10907 levels... from system_stack_error_from_name_error.rb:3:in `initialize' from system_stack_error_from_name_error.rb:3:in `initialize' from system_stack_error_from_name_error.rb:3:in `method_missing' from system_stack_error_from_name_error.rb:3:in `
' ``` This happens on Ruby 2.0.0, 2,1,5, 2.2.0 and ruby-trunk(rev 49451). -- https://bugs.ruby-lang.org/