Project

General

Profile

Actions

Bug #1886

closed

Strange exception thrown when Exception#new is overridden and returns a non-Exception

Added by tmat (Tomas Matousek) over 15 years ago. Updated over 13 years ago.

Status:
Closed
ruby -v:
ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-mswin32]
[ruby-core:24767]

Description

=begin
class ZeroDivisionError
def self.new(message)
puts 'new ZeroDivError'
'not an exception'
end
end

module Any
def self.===(other)
puts "?#{other.inspect}"
true
end
end

begin
1/0
rescue Exception, Any
puts "rescue"
p $!
ensure
puts "ensure"
end

puts 'Done'

=====

The output is:
new ZeroDivError
ensure

This means that if a non-Exception is returned from the new method above, the stack is magically unwound ignoring all rescue clauses (=== is not called) and no error message is displayed at all.

The same behavior can be observed in both:
ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]
ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-mswin32]
=end


Related issues 1 (0 open1 closed)

Related to Ruby master - Feature #12338: bypass Exception.newClosedActions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0