Skip to content

Commit abefd3e

Browse files
eregonmatzbot
authored andcommitted
[ruby/psych] Check that Data members match exactly
* Fixes ruby/psych#760 ruby/psych@952008c898
1 parent b3f0fb5 commit abefd3e

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

test/psych/test_data.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,31 @@ def test_load
6464
assert_equal "hello", obj.bar
6565
assert_equal "bar", obj.foo
6666
end
67+
68+
def test_members_must_be_identical
69+
TestData.const_set :D, Data.define(:a, :b)
70+
d = Psych.dump(TestData::D.new(1, 2))
71+
72+
# more members
73+
TestData.send :remove_const, :D
74+
TestData.const_set :D, Data.define(:a, :b, :c)
75+
e = assert_raise(ArgumentError) { Psych.unsafe_load d }
76+
assert_equal 'missing keyword: :c', e.message
77+
78+
# less members
79+
TestData.send :remove_const, :D
80+
TestData.const_set :D, Data.define(:a)
81+
e = assert_raise(ArgumentError) { Psych.unsafe_load d }
82+
assert_equal 'unknown keyword: :b', e.message
83+
84+
# completely different members
85+
TestData.send :remove_const, :D
86+
TestData.const_set :D, Data.define(:foo, :bar)
87+
e = assert_raise(ArgumentError) { Psych.unsafe_load d }
88+
assert_equal 'unknown keywords: :a, :b', e.message
89+
ensure
90+
TestData.send :remove_const, :D
91+
end
6792
end
6893
end
6994

0 commit comments

Comments
 (0)