[#68478] Looking for MRI projects for Ruby Google Summer of Code 2015 — Tony Arcieri <bascule@...>

Hi ruby-core,

10 messages 2015/03/10

[ruby-core:68434] [Ruby trunk - Bug #10847] SystemStackError after NameError prepends a module

From: hanachin@...
Date: 2015-03-05 17:14:45 UTC
List: ruby-core #68434
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 `<main>'
```

This happens on Ruby 2.0.0, 2,1,5, 2.2.0 and ruby-trunk(rev 49451).



-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next