mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
merge revision(s) c79d2e5474
: [Backport #18562]
Fix TAG_THROW through require [Bug #18562] Previously this was being incorrectly swapped with TAG_RAISE in the next line. This would end up checking the T_IMEMO throw_data to the exception handling (which calls Module#===). This happened to not break existing tests because Module#=== returned false when klass is NULL. This commit handles throw from require correctly by jumping to the tag retaining the TAG_THROW state. --- load.c | 2 +- test/ruby/test_exception.rb | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-)
This commit is contained in:
parent
f4f0c793f6
commit
0bd3e436e2
3 changed files with 23 additions and 2 deletions
2
load.c
2
load.c
|
@ -1131,7 +1131,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception)
|
|||
if (ftptr) load_unlock(RSTRING_PTR(path), !state);
|
||||
|
||||
if (state) {
|
||||
if (state == TAG_FATAL) {
|
||||
if (state == TAG_FATAL || state == TAG_THROW) {
|
||||
EC_JUMP_TAG(ec, state);
|
||||
}
|
||||
else if (exception) {
|
||||
|
|
|
@ -181,6 +181,27 @@ class TestException < Test::Unit::TestCase
|
|||
}
|
||||
end
|
||||
|
||||
def test_catch_throw_in_require_cant_be_rescued
|
||||
bug18562 = '[ruby-core:107403]'
|
||||
Tempfile.create(["dep", ".rb"]) {|t|
|
||||
t.puts("throw :extdep, 42")
|
||||
t.close
|
||||
|
||||
rescue_all = Class.new(Exception)
|
||||
def rescue_all.===(_)
|
||||
raise "should not reach here"
|
||||
end
|
||||
|
||||
v = assert_throw(:extdep, bug18562) do
|
||||
require t.path
|
||||
rescue rescue_all => e
|
||||
assert(false, "should not reach here")
|
||||
end
|
||||
|
||||
assert_equal(42, v, bug18562)
|
||||
}
|
||||
end
|
||||
|
||||
def test_throw_false
|
||||
bug12743 = '[ruby-core:77229] [Bug #12743]'
|
||||
Thread.start {
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
|
||||
#define RUBY_VERSION_TEENY 4
|
||||
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
|
||||
#define RUBY_PATCHLEVEL 194
|
||||
#define RUBY_PATCHLEVEL 195
|
||||
|
||||
#define RUBY_RELEASE_YEAR 2022
|
||||
#define RUBY_RELEASE_MONTH 3
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue