Skip to content

Commit 44db2c5

Browse files
tenderlovejacob-shops
authored andcommitted
[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. ruby/rubygems@0ff4790f4c
1 parent 12be552 commit 44db2c5

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

lib/rubygems/package/tar_header.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class Gem::Package::TarHeader
5656
##
5757
# Pack format for a tar header
5858

59-
PACK_FORMAT = "a100" + # name
59+
PACK_FORMAT = ("a100" + # name
6060
"a8" + # mode
6161
"a8" + # uid
6262
"a8" + # gid
@@ -71,12 +71,12 @@ class Gem::Package::TarHeader
7171
"a32" + # gname
7272
"a8" + # devmajor
7373
"a8" + # devminor
74-
"a155" # prefix
74+
"a155").freeze # prefix
7575

7676
##
7777
# Unpack format for a tar header
7878

79-
UNPACK_FORMAT = "A100" + # name
79+
UNPACK_FORMAT = ("A100" + # name
8080
"A8" + # mode
8181
"A8" + # uid
8282
"A8" + # gid
@@ -91,7 +91,7 @@ class Gem::Package::TarHeader
9191
"A32" + # gname
9292
"A8" + # devmajor
9393
"A8" + # devminor
94-
"A155" # prefix
94+
"A155").freeze # prefix
9595

9696
attr_reader(*FIELDS)
9797

test/rubygems/test_gem_package_tar_header.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,25 @@ def setup
2626
@tar_header = Gem::Package::TarHeader.new header
2727
end
2828

29+
def test_decode_in_ractor
30+
new_header = Ractor.new(@tar_header.to_s) do |str|
31+
Gem::Package::TarHeader.from StringIO.new str
32+
end.value
33+
34+
assert_headers_equal @tar_header, new_header
35+
end if defined?(Ractor) && Ractor.instance_methods.include?(:value)
36+
37+
def test_encode_in_ractor
38+
header_bytes = @tar_header.to_s
39+
40+
new_header = Ractor.new(header_bytes) do |str|
41+
header = Gem::Package::TarHeader.from StringIO.new str
42+
header.to_s
43+
end.value
44+
45+
assert_headers_equal header_bytes, new_header
46+
end if defined?(Ractor) && Ractor.instance_methods.include?(:value)
47+
2948
def test_self_from
3049
io = TempIO.new @tar_header.to_s
3150

0 commit comments

Comments
 (0)