From: gregory.t.brown@... Date: 2016-05-25T21:14:18+00:00 Subject: [ruby-core:75724] [Ruby trunk Bug#12430] Segfault in irb when improperly using coerce in combination with method_missing Issue #12430 has been reported by Gregory Brown. ---------------------------------------- Bug #12430: Segfault in irb when improperly using coerce in combination with method_missing https://bugs.ruby-lang.org/issues/12430 * Author: Gregory Brown * Status: Open * Priority: Normal * Assignee: * ruby -v: * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- Don't ask how or why I wrote this code, but suppose you have a class like this: ~~~ class BrokenNumber def initialize(num) @num = num end def method_missing(m, *a, &b) @num.send(m, *a, &b) end def coerce(other) [self, self] end end ~~~ Then you require this code in IRB, and you create a new instance (x) and you then call 2+x. The first call will raise a SystemStackError. The second will cause a segmentation fault. ~~~ >> require "./broken" => true >> x = BrokenNumber.new(2) => # >> 2 + x SystemStackError: stack level too deep from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' ... 7559 levels... from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from /Users/gtb/broken.rb:7:in `+' from /Users/gtb/broken.rb:7:in `method_missing' from (irb):3:in `+' from (irb):3 from /Users/gtb/.rubies/ruby-2.3.1/bin/irb:11:in `
' >> 2 + x Segmentation fault: 11 MacBook-Pro:~ gtb$ ruby -v ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15] ~~~ I've asked multiple people to confirm this and they've reproduced the error. I have no clue how to debug it, but thought it may be worth mentioning... even though it's a strange corner case and invalid code. -- https://bugs.ruby-lang.org/ Unsubscribe: