Project

General

Profile

Actions

Bug #5473

closed

Raise in method_missing causes infinite loop

Added by calamitas (Peter Vanbroekhoven) about 13 years ago. Updated over 12 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 1.9.3dev (2011-10-11 revision 33457) [i386-darwin9.8.0]
Backport:
[ruby-core:40287]

Description

=begin
The following code causes an infinite loop:

class ::Object

def method_missing(m, *a, &b)
  raise ArgumentError.new("haha")
end

end

1.foo

This is due to the raise calling (({to_str})) on the exception, which isn't defined. So a (({method_missing})) that also covers the (({Exception})) class and that contains a (({raise})) (at least the version with one argument) causes an infinite loop.

I'm a bit hesitant to call this a bug, except that the pattern above happened in code that works on Ruby 1.8 and breaks on 1.9.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0