From: nagachika00@... Date: 2016-02-14T15:35:54+00:00 Subject: [ruby-core:73808] [Ruby trunk Bug#12068] raise overwrites exception cause even if exception is not new Issue #12068 has been updated by Tomoyuki Chikanaga. Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.0.0: DONTNEED, 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED Please don't backport to the stable branches by yourself. The branch maintainers (usa and me) will do. I fill Backport field. I don't think the existing application depend on this behavior. Any opinions? ---------------------------------------- Bug #12068: raise overwrites exception cause even if exception is not new https://bugs.ruby-lang.org/issues/12068#change-56986 * Author: Charles Nutter * Status: Closed * Priority: Normal * Assignee: * ruby -v: 2.3.0 * Backport: 2.0.0: DONTNEED, 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED ---------------------------------------- It appears that `raise` will overwrite the original cause of an exception even when re-raising the same one. I believe this is a bug, since loses the original cause and associates the re-raised exception with a completely unrelated cause. Example: ```ruby begin begin raise 'a' rescue => a begin raise 'b' rescue => b p [b, b.cause] begin raise 'c' rescue raise b end end end rescue p [$!, $!.cause] end ``` CRuby outputs: ``` [] ~/projects/jruby $ ruby23 cause.rb [#, #] [#, #] ``` Here, the original cause of the "b" exception (the "a" exception) is lost, replaced during the re-raise with the "c" exception. I believe JRuby 9.0.5.0's behavior is correct here: ``` [] ~/projects/jruby $ rvm jruby-9.0.5.0 do ruby cause.rb [#, #] [#, #] ``` -- https://bugs.ruby-lang.org/ Unsubscribe: