summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2025-11-04 11:00:01 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2025-11-12 18:35:16 +0900
commitf958800574c42e69844db7305e69d1f494529543 (patch)
treed0a1953fde33302f78317c8e7422543bc1009bbc
parentf4f728b319086eea3db6e9909fb9c849c276f813 (diff)
Reapply "[ruby/rubygems] Fix constants in TAR to be frozen"
This reverts commit 136157e772ab2b2ea08555d0ad821da7dc2bde96.
-rw-r--r--lib/rubygems/package/tar_header.rb8
-rw-r--r--test/rubygems/test_gem_package_tar_header.rb19
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