Actions
Bug #9622
closedExtra method arguments are magically swallowed after first successful call, possible method cache bug
Description
The following code behaviour totally change since ruby 2.0.0
class Foo
def bar(*args)
attribute(:bar, *args)
end
def attribute(name)
puts name
end
end
foo = Foo.new
begin
foo.bar(100)
rescue => e
puts e.class.name
end
foo.bar # legit
5.times do
foo.bar(100)
end
puts 'No errors??? WTF???'
ruby < 2.0 output:
ArgumentError
bar
(eval):3:in `attribute': wrong number of arguments (2 for 1) (ArgumentError)
from (eval):3:in `bar'
from foo.rb:28
from foo.rb:27:in `times'
from foo.rb:27
Which is expected.
But ruby >= 2.0 output
ArgumentError
bar
bar
bar
bar
bar
bar
No errors??? WTF???
In short, after the first successful call, the extra arguments are just ignored. I have no idea of what is going on here, but it look like a broken optimization.
All rubies >= 2.0 are affected. 1.8.7 and 1.9.3 are fine.
Regards.
A gist describing the issue: https://gist.github.com/byroot/9495455
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0