From af8c448129f07faf55248e583a7e5a1b8d55600f Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sat, 25 Oct 2025 21:08:20 +0900 Subject: [PATCH 1/4] Add configured environment variables first And `LD_PRELOAD` is set to `PRELOADENV` on Linux. --- test/ruby/test_process.rb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb index 3bbff73df8c070..a26712d0e6d2ba 100644 --- a/test/ruby/test_process.rb +++ b/test/ruby/test_process.rb @@ -283,20 +283,18 @@ def test_overwrite_ENV end MANDATORY_ENVS = %w[RUBYLIB GEM_HOME GEM_PATH RUBY_FREE_AT_EXIT] - case RbConfig::CONFIG['target_os'] - when /linux/ - MANDATORY_ENVS << 'LD_PRELOAD' - when /mswin|mingw/ - MANDATORY_ENVS.concat(%w[HOME USER TMPDIR PROCESSOR_ARCHITECTURE]) - when /darwin/ - MANDATORY_ENVS.concat(ENV.keys.grep(/\A__CF_/)) - end if e = RbConfig::CONFIG['LIBPATHENV'] MANDATORY_ENVS << e end if e = RbConfig::CONFIG['PRELOADENV'] and !e.empty? MANDATORY_ENVS << e end + case RbConfig::CONFIG['target_os'] + when /mswin|mingw/ + MANDATORY_ENVS.concat(%w[HOME USER TMPDIR PROCESSOR_ARCHITECTURE]) + when /darwin/ + MANDATORY_ENVS.concat(ENV.keys.grep(/\A__CF_/)) + end PREENVARG = ['-e', "%w[#{MANDATORY_ENVS.join(' ')}].each{|e|ENV.delete(e)}"] ENVARG = ['-e', 'ENV.each {|k,v| puts "#{k}=#{v}" }'] ENVCOMMAND = [RUBY].concat(PREENVARG).concat(ENVARG) From 8e3957cc760ddc55cfb55993b70e9f4c1a230ac2 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sat, 25 Oct 2025 21:11:23 +0900 Subject: [PATCH 2/4] Remove automatically set environment variables Probably since macOS Runner Image Version 20251020.XXXX, spawned processes initialize `TMPDIR` environment variable under the hood. --- test/ruby/test_process.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb index a26712d0e6d2ba..857ceab6762fda 100644 --- a/test/ruby/test_process.rb +++ b/test/ruby/test_process.rb @@ -293,7 +293,10 @@ def test_overwrite_ENV when /mswin|mingw/ MANDATORY_ENVS.concat(%w[HOME USER TMPDIR PROCESSOR_ARCHITECTURE]) when /darwin/ - MANDATORY_ENVS.concat(ENV.keys.grep(/\A__CF_/)) + MANDATORY_ENVS.concat(%w[TMPDIR], ENV.keys.grep(/\A__CF_/)) + # IO.popen([ENV.keys.to_h {|e| [e, nil]}, + # RUBY, "-e", %q[print ENV.keys.join(?\0)]], + # &:read).split(?\0) end PREENVARG = ['-e', "%w[#{MANDATORY_ENVS.join(' ')}].each{|e|ENV.delete(e)}"] ENVARG = ['-e', 'ENV.each {|k,v| puts "#{k}=#{v}" }'] From 0a924d46156a9c86ba657f2cb4e2fcee9aee81bf Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sat, 25 Oct 2025 11:57:25 +0900 Subject: [PATCH 3/4] Use pointer to the member Instead of the offset calculation. --- include/ruby/internal/core/rtypeddata.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/include/ruby/internal/core/rtypeddata.h b/include/ruby/internal/core/rtypeddata.h index bf0f60b9132029..24e87e63f979f9 100644 --- a/include/ruby/internal/core/rtypeddata.h +++ b/include/ruby/internal/core/rtypeddata.h @@ -543,11 +543,10 @@ RTYPEDDATA_GET_DATA(VALUE obj) } #endif - /* We reuse the data pointer in embedded TypedData. We can't use offsetof - * since RTypedData a non-POD type in C++. */ - const size_t embedded_typed_data_size = sizeof(struct RTypedData) - sizeof(void *); - - return RTYPEDDATA_EMBEDDED_P(obj) ? (char *)obj + embedded_typed_data_size : RTYPEDDATA(obj)->data; + /* We reuse the data pointer in embedded TypedData. */ + return RTYPEDDATA_EMBEDDED_P(obj) ? + RBIMPL_CAST((void *)&(RTYPEDDATA(obj)->data)) : + RTYPEDDATA(obj)->data; } RBIMPL_ATTR_PURE() From c6d1458421796786d26e084b48a0a4a7e3b40867 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sat, 25 Oct 2025 19:10:55 +0900 Subject: [PATCH 4/4] [DOC] Link github style references in ChangeLog --- tool/lib/vcs.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tool/lib/vcs.rb b/tool/lib/vcs.rb index 45b84b303503ad..602f6dd519c5b3 100644 --- a/tool/lib/vcs.rb +++ b/tool/lib/vcs.rb @@ -592,6 +592,10 @@ def changelog_formatter(path, arg, base_url = nil) s = s.join('') end + s.gsub!(%r[(?!<\w)([-\w]+/[-\w]+)(?:@(\h{8,40})|#(\d{5,}))\b]) do + path = defined?($2) ? "commit/#{$2}" : "pull/#{$3}" + "[#$&](https://github.com/#{$1}/#{path})" + end if %r[^ +(https://github\.com/[^/]+/[^/]+/)commit/\h+\n(?=(?: +\n(?i: +Co-authored-by: .*\n)+)?(?:\n|\Z))] =~ s issue = "#{$1}pull/" s.gsub!(/\b(?:(?i:fix(?:e[sd])?) +|GH-)\K#(?=\d+\b)|\(\K#(?=\d+\))/) {issue}