Actions
Bug #13043
closedException#cause can become recursive/infinite
Bug #13043:
Exception#cause can become recursive/infinite
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16]
Description
In a certain situation, Exception#cause can become an infinite list:
def raise_errors
begin
raise "error 1"
ensure
orig_error = $!
begin
raise "error 2"
rescue => err
raise orig_error || err
end
end
end
x = nil
begin
raise_errors
rescue
x = $!
end
x.cause.cause.object_id == x.object_id
Note that this pattern happened during an HTTP request with net/http: see https://github.com/ruby/ruby/blob/v2_3_1/lib/net/http/response.rb#L261. I would expect that x would be "error 2", x.cause would be "error 1", and x.cause.cause would be nil. Instead an infinite loop forms, breaking error reporting code that loops over an exception's cause
Actions