Bug #5077
closedmethod_missing throws NoMemoryError after inheriting from BasicObject
Description
If a class inherits from BasicObject and then overwrites method_missing like this:
class A < BasicObject
def method_missing(*a)
puts "#{a}"
end
end
And we try it:
A.new.fooooo
The interpreter enters what looks like a loop and then crashes with this trace (in irb):
NoMemoryError: failed to allocate memory
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
from (irb):3:in method_missing' from (irb):3:in
method_missing'
If we create the same class with the same method_missing but without inheriting from BasicObject it works right.