diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-09-22 18:57:10 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-09-22 19:04:55 +0900 |
commit | 7c0230b05d0978958f89434c84ddd9c82419c1a5 (patch) | |
tree | aa1434ee7b1128e179d719f1e24fe6b2bfe0ac57 | |
parent | e2976fd1f678866be68ec213926f336a87e9a6aa (diff) |
Check the entire name as `ruby2_keywords_flag` [Bug #18184]
-rw-r--r-- | marshal.c | 2 | ||||
-rw-r--r-- | test/ruby/test_marshal.rb | 8 |
2 files changed, 8 insertions, 2 deletions
@@ -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; diff --git a/test/ruby/test_marshal.rb b/test/ruby/test_marshal.rb index a0d9d96a1f..619aaa6736 100644 --- a/test/ruby/test_marshal.rb +++ b/test/ruby/test_marshal.rb @@ -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 |