Actions
Bug #18562
closedthrow_data passed to rescue through require
Bug #18562:
throw_data passed to rescue through require
Description
When we throw in a require it's incorrectly considered as a raise, making the T_IMEMO
throw_data
object accessible via rescue (in a contrived case). In regular usage this is unlikely to cause an issue because Module#===
immediately returns false for objects with klass == 0.
With test_throw.rb
:
throw :extdep, 42
and
class Anything < Exception
def self.===(_); true; end
end
catch(:extdep) do
begin
require "./test_throw"
rescue Anything => e
p e
end
end
We get
in 'p': method inspect' called on unexpected T_IMEMO object (0x00007f5e1486b130 flags=0x10000301a) (NotImplementedError)
I've proposed a fix via PR https://github.com/ruby/ruby/pull/5513
Actions