From 5b2ec0eb1be663ff6d3bc12660d48b1e25375353 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 3 Oct 2025 17:59:54 +0900 Subject: [PATCH] Save `ns` that may be clobbered by `setjmp`/`longjmp` --- load.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/load.c b/load.c index c63aa2abbbf087..1928721c9e9cb2 100644 --- a/load.c +++ b/load.c @@ -1289,14 +1289,15 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa { volatile int result = -1; rb_thread_t *th = rb_ec_thread_ptr(ec); + const rb_namespace_t *ns = rb_loading_namespace(); volatile const struct { VALUE wrapper, self, errinfo; rb_execution_context_t *ec; + const rb_namespace_t *ns; } saved = { th->top_wrapper, th->top_self, ec->errinfo, - ec, + ec, ns, }; - const rb_namespace_t *ns = rb_loading_namespace(); enum ruby_tag_type state; char *volatile ftptr = 0; VALUE path; @@ -1365,6 +1366,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa EC_POP_TAG(); ec = saved.ec; + ns = saved.ns; rb_thread_t *th2 = rb_ec_thread_ptr(ec); th2->top_self = saved.self; th2->top_wrapper = saved.wrapper;