Skip to content

Commit 13530af

Browse files
djoooooematzbot
authored andcommitted
[rubygems/rubygems] Avoid UTF-32 and UTF-16 strings with trailing bytes in truffleruby
rubygems/rubygems@5f8249471f
1 parent b37ab8c commit 13530af

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

test/rubygems/test_gem_safe_marshal.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,12 @@ class TestGemSafeMarshal < Gem::TestCase
9999
define_method("test_safe_load_marshal Array [\"abc\", \"abc\"] Windows-1256") { assert_safe_load_marshal "\x04\b[\aI\"\babc\x06:\rencoding\"\x11Windows-1256@\x06", additional_methods: [->(x) { x.map(&:encoding) }] }
100100
define_method("test_safe_load_marshal String \"abc\" binary") { assert_safe_load_marshal "\x04\b\"\babc", additional_methods: [:encoding] }
101101
define_method("test_safe_load_marshal Array [\"abc\", \"abc\"] binary") { assert_safe_load_marshal "\x04\b[\a\"\babc@\x06", additional_methods: [->(x) { x.map(&:encoding) }] }
102-
define_method("test_safe_load_marshal String \"\\x61\\x62\\x63\" utf32") { assert_safe_load_marshal "\x04\bI\"\babc\x06:\rencoding\"\vUTF-32", additional_methods: [:encoding] }
103-
define_method("test_safe_load_marshal Array [\"\\x61\\x62\\x63\", \"\\x61\\x62\\x63\"] utf32") { assert_safe_load_marshal "\x04\b[\aI\"\babc\x06:\rencoding\"\vUTF-32@\x06", additional_methods: [->(x) { x.map(&:encoding) }] }
102+
unless RUBY_ENGINE == "truffleruby" # Not supported
103+
define_method("test_safe_load_marshal String \"\\x61\\x62\\x63\" utf32 with length not a multiple of 4") { assert_safe_load_marshal "\x04\bI\"\babc\x06:\rencoding\"\vUTF-32", additional_methods: [:encoding] }
104+
define_method("test_safe_load_marshal Array [\"\\x61\\x62\\x63\", \"\\x61\\x62\\x63\"] utf32 with length not a multiple of 4)") { assert_safe_load_marshal "\x04\b[\aI\"\babc\x06:\rencoding\"\vUTF-32@\x06", additional_methods: [->(x) { x.map(&:encoding) }] }
105+
end
106+
define_method("test_safe_load_marshal String \"\\x61\\x62\\x63\\x64\" utf32") { assert_safe_load_marshal "\x04\bI\"\x09abcd\x06:\rencoding\"\vUTF-32", additional_methods: [:encoding] }
107+
define_method("test_safe_load_marshal Array [\"\\x61\\x62\\x63\\x64\", \"\\x61\\x62\\x63\\x64\"] utf32") { assert_safe_load_marshal "\x04\b[\aI\"\x09abcd\x06:\rencoding\"\vUTF-32@\x06", additional_methods: [->(x) { x.map(&:encoding) }] }
104108
define_method("test_safe_load_marshal String \"abc\" ivar") { assert_safe_load_marshal "\x04\bI\"\babc\a:\x06ET:\n@typeI\"\ttype\x06;\x00T", permitted_ivars: { "String" => %w[@type E] } }
105109
define_method("test_safe_load_marshal String \"\"") { assert_safe_load_marshal "\x04\bI\"\babc\x06:\x06ET" }
106110
define_method("test_safe_load_marshal Time 2000-12-31 20:07:59 -1152") { assert_safe_load_marshal "\x04\bIu:\tTime\r'@\x19\x80\x00\x00\xB0\xEF\a:\voffseti\xFE Y:\tzone0", additional_methods: [:ctime, :to_f, :to_r, :to_i, :zone, :subsec, :instance_variables, :dst?, :to_a] }
@@ -163,14 +167,16 @@ def test_string_with_encoding
163167
String.new("abc", encoding: "UTF-8"),
164168
String.new("abc", encoding: "Windows-1256"),
165169
String.new("abc", encoding: Encoding::BINARY),
166-
String.new("abc", encoding: "UTF-32"),
170+
String.new("abcd", encoding: "UTF-32"),
171+
# TruffleRuby: Not supported since length of UTF-16 string must be a multiple of 2
172+
(String.new("abc", encoding: "UTF-32") unless RUBY_ENGINE == "truffleruby"),
167173

168174
String.new("", encoding: "US-ASCII"),
169175
String.new("", encoding: "UTF-8"),
170176
String.new("", encoding: "Windows-1256"),
171177
String.new("", encoding: Encoding::BINARY),
172178
String.new("", encoding: "UTF-32"),
173-
].each do |s|
179+
].compact.each do |s|
174180
assert_safe_load_as s, additional_methods: [:encoding]
175181
assert_safe_load_as [s, s], additional_methods: [->(a) { a.map(&:encoding) }]
176182
end

0 commit comments

Comments
 (0)