diff options
| author | Aaron Patterson <tenderlove@ruby-lang.org> | 2025-10-31 14:49:24 -0700 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2025-11-04 00:22:33 +0000 |
| commit | 2c2eaa3103e5cf1cbfc2b16d9db975a9b8a0399a (patch) | |
| tree | e6fc0bc1de5a32940647836df33c6b021c8b6c41 | |
| parent | bac6a25ad3b6ed02ece11a2790cec3a2e6f8c8c9 (diff) | |
[ruby/rubygems] Fix constants in TAR to be frozen
I would like to use the tar implementation inside a Ractor, but two of
the constants are not frozen. This patch freezes the constants so we
can use it in a Ractor.
https://github.com/ruby/rubygems/commit/0ff4790f4c
| -rw-r--r-- | lib/rubygems/package/tar_header.rb | 8 | ||||
| -rw-r--r-- | test/rubygems/test_gem_package_tar_header.rb | 19 |
2 files changed, 23 insertions, 4 deletions
diff --git a/lib/rubygems/package/tar_header.rb b/lib/rubygems/package/tar_header.rb index 0ebcbd789d..dd20d65080 100644 --- a/lib/rubygems/package/tar_header.rb +++ b/lib/rubygems/package/tar_header.rb @@ -56,7 +56,7 @@ class Gem::Package::TarHeader ## # Pack format for a tar header - PACK_FORMAT = "a100" + # name + PACK_FORMAT = ("a100" + # name "a8" + # mode "a8" + # uid "a8" + # gid @@ -71,12 +71,12 @@ class Gem::Package::TarHeader "a32" + # gname "a8" + # devmajor "a8" + # devminor - "a155" # prefix + "a155").freeze # prefix ## # Unpack format for a tar header - UNPACK_FORMAT = "A100" + # name + UNPACK_FORMAT = ("A100" + # name "A8" + # mode "A8" + # uid "A8" + # gid @@ -91,7 +91,7 @@ class Gem::Package::TarHeader "A32" + # gname "A8" + # devmajor "A8" + # devminor - "A155" # prefix + "A155").freeze # prefix attr_reader(*FIELDS) diff --git a/test/rubygems/test_gem_package_tar_header.rb b/test/rubygems/test_gem_package_tar_header.rb index a3f95bb770..34f92967e9 100644 --- a/test/rubygems/test_gem_package_tar_header.rb +++ b/test/rubygems/test_gem_package_tar_header.rb @@ -26,6 +26,25 @@ class TestGemPackageTarHeader < Gem::Package::TarTestCase @tar_header = Gem::Package::TarHeader.new header end + def test_decode_in_ractor + new_header = Ractor.new(@tar_header.to_s) do |str| + Gem::Package::TarHeader.from StringIO.new str + end.value + + assert_headers_equal @tar_header, new_header + end if defined?(Ractor) && Ractor.instance_methods.include?(:value) + + def test_encode_in_ractor + header_bytes = @tar_header.to_s + + new_header = Ractor.new(header_bytes) do |str| + header = Gem::Package::TarHeader.from StringIO.new str + header.to_s + end.value + + assert_headers_equal header_bytes, new_header + end if defined?(Ractor) && Ractor.instance_methods.include?(:value) + def test_self_from io = TempIO.new @tar_header.to_s |
