summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--marshal.c2
-rw-r--r--test/ruby/test_marshal.rb8
2 files changed, 8 insertions, 2 deletions
diff --git a/marshal.c b/marshal.c
index a817cf9742..47b13bc684 100644
--- a/marshal.c
+++ b/marshal.c
@@ -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