From d9b7403746249b532ac57ca80112d7e63a417d86 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Mon, 4 Oct 2021 07:35:39 -0700 Subject: Use a rescue around the internal realpath call for each loaded feature This appears to be only necessary on Solaris, but this commit enables it unconditionally to test breakage. The following commit will switch to only enabling it on Solaris. --- load.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'load.c') diff --git a/load.c b/load.c index 3c0c723f72..38b26881ce 100644 --- a/load.c +++ b/load.c @@ -1060,6 +1060,33 @@ rb_ext_ractor_safe(bool flag) GET_THREAD()->ext_config.ractor_safe = flag; } +#if 1 +static VALUE +required_feature__realpath(VALUE path) +{ + return rb_realpath_internal(Qnil, path, 1); +} + +static VALUE +required_feature_realpath_rescue(VALUE path, VALUE exc) +{ + return path; +} + +static VALUE +required_feature_realpath(VALUE path) +{ + return rb_rescue(required_feature__realpath, path, + required_feature_realpath_rescue, path); +} +#else +static VALUE +required_feature_realpath(VALUE path) +{ + return rb_realpath_internal(Qnil, path, 1); +} +#endif + /* * returns * 0: if already loaded (false) @@ -1111,7 +1138,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa result = TAG_RETURN; } else if (RTEST(rb_hash_aref(realpaths, - realpath = rb_realpath_internal(Qnil, path, 1)))) { + realpath = required_feature_realpath(path)))) { result = 0; } else { -- cgit v1.2.3