From: usa@... Date: 2018-03-18T15:04:53+00:00 Subject: [ruby-core:86184] [Ruby trunk Bug#14179] Forwardable Segmentation fault ruby 2.2.8p477 (2017-09-14 revision 59906) Issue #14179 has been updated by usa (Usaku NAKAMURA). Backport changed from 2.3: REQUIRED, 2.4: DONTNEED, 2.5: DONTNEED to 2.3: DONE, 2.4: DONTNEED, 2.5: DONTNEED ruby_2_3 r62820 merged revision(s) 55372. ---------------------------------------- Bug #14179: Forwardable Segmentation fault ruby 2.2.8p477 (2017-09-14 revision 59906) https://bugs.ruby-lang.org/issues/14179#change-71070 * Author: dadah89 (Igor Justino) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.2.8p477 (2017-09-14 revision 59906) * Backport: 2.3: DONE, 2.4: DONTNEED, 2.5: DONTNEED ---------------------------------------- Hello, Delegating `backtrace` causes a segmentation fault on ruby 2.2.8. Seems to be related to this change: https://github.com/ruby/ruby/commit/a14ba6e3d58d6f63f47c0549f60306c4989478ba Looking at that change, seems like the `$@` call on line 207 would cause an infinite loop (assuming `$@` would execute something similar `$!.backtrace`, but I'm not sure how `$@` is implemented). Example: ``` irb(main):052:0> class WrappedException < StandardError irb(main):053:1> extend Forwardable irb(main):054:1> irb(main):055:1* def_delegators :@err, :backtrace irb(main):056:1> irb(main):057:1* def initialize(err) irb(main):058:2> @err = err irb(main):059:2> end irb(main):060:1> end => :initialize irb(main):061:0> irb(main):062:0* begin irb(main):063:1* raise WrappedException, StandardError.new('test') irb(main):064:1> rescue => e irb(main):065:1> e.backtrace irb(main):066:1> end Segmentation fault ``` ``` irb(main):031:0> class WrappedException < StandardError irb(main):032:1> extend Forwardable irb(main):033:1> irb(main):034:1* def_delegators :@err, :backtrace irb(main):035:1> irb(main):036:1* def initialize(err) irb(main):037:2> @err = err irb(main):038:2> end irb(main):039:1> end => :initialize irb(main):040:0> irb(main):041:0* begin irb(main):042:1* raise WrappedException, StandardError.new('test') irb(main):043:1> rescue => e irb(main):044:1> e.backtrace irb(main):045:1> end RuntimeError: can't modify frozen SystemStackError from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' ... 5481 levels... from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from /opt/.rbenv/versions/2.2.8/lib/ruby/2.2.0/forwardable.rb:207:in `backtrace' from (irb):44:in `rescue in irb_binding' from (irb):41 from /opt/.rbenv/versions/2.2.8/bin/irb:11:in `
' irb(main):046:0> ``` -- https://bugs.ruby-lang.org/ Unsubscribe: