diff options
author | NARUSE, Yui <naruse@airemix.jp> | 2022-02-07 20:08:50 +0900 |
---|---|---|
committer | NARUSE, Yui <naruse@airemix.jp> | 2022-02-07 20:08:50 +0900 |
commit | 807dd0479267a067e8208a2053b446fa13a2e66f (patch) | |
tree | f3942a98f7401f5f3602ec153c10fb15a799c634 /load.c | |
parent | 86c8e15170484fe23b311e567717053f147ffd9c (diff) |
merge revision(s) c79d2e54748f52c5023b0a1ee441561df9826c17: [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(-)
Diffstat (limited to 'load.c')
-rw-r--r-- | load.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -1155,7 +1155,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa if (ftptr) load_unlock(th2->vm, 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) { |