Check the entire name as ruby2_keywords_flag [Bug #18184]

This commit is contained in:
Nobuyoshi Nakada 2021-09-22 18:57:10 +09:00
parent e2976fd1f6
commit 7c0230b05d
No known key found for this signature in database
GPG Key ID: 7CD2805BFA3770C6
2 changed files with 8 additions and 2 deletions

View File

@ -1424,7 +1424,7 @@ ruby2_keywords_flag_check(VALUE sym)
long l;
RSTRING_GETMEM(sym, p, l);
if (l <= 0) return 0;
if (name_equal(name_s_ruby2_keywords_flag, rb_strlen_lit(name_s_ruby2_keywords_flag), p, 1)) {
if (name_equal(name_s_ruby2_keywords_flag, rb_strlen_lit(name_s_ruby2_keywords_flag), p, l)) {
return 1;
}
return 0;

View File

@ -806,8 +806,14 @@ class TestMarshal < Test::Unit::TestCase
def test_marshal_with_ruby2_keywords_hash
flagged_hash = ruby2_keywords_hash(key: 42)
hash = Marshal.load(Marshal.dump(flagged_hash))
data = Marshal.dump(flagged_hash)
hash = Marshal.load(data)
assert_equal(42, ruby2_keywords_test(*[hash]))
hash2 = Marshal.load(data.sub!(/\x06K(?=T\z)/, "\x08KEY"))
assert_raise(ArgumentError, /\(given 1, expected 0\)/) {
ruby2_keywords_test(*[hash2])
}
end
def exception_test