diff options
author | Jordan Owens <jkowens@gmail.com> | 2019-01-16 00:29:12 -0500 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2019-06-25 15:56:20 +0900 |
commit | 0016edbead23f2a9b4fa17bcec2798b5bf6a4c07 (patch) | |
tree | 54754fad772281df1078380d4dc215b83c0b5104 /test | |
parent | a53ab897c35586a836710a8afeb1e8c1abd9b087 (diff) | |
download | ruby-0016edbead23f2a9b4fa17bcec2798b5bf6a4c07.tar.gz |
Add test to demonstrate issue deserializing hash with ivar
Currently the elements of a hash are revived before any ivar values.
This causes an issue when the `[]=` method references an instance
variable.
Diffstat (limited to 'test')
-rw-r--r-- | test/psych/test_hash.rb | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/psych/test_hash.rb b/test/psych/test_hash.rb index e93aa73249..2a563da1da 100644 --- a/test/psych/test_hash.rb +++ b/test/psych/test_hash.rb @@ -6,6 +6,18 @@ module Psych class X < Hash end + class HashWithIvar < Hash + def initialize + @keys = [] + super + end + + def []=(k, v) + @keys << k + super(k, v) + end + end + class HashWithCustomInit < Hash attr_reader :obj def initialize(obj) @@ -24,6 +36,14 @@ module Psych @hash = { :a => 'b' } end + def test_hash_with_ivar + t1 = HashWithIvar.new + t1[:foo] = :bar + t2 = Psych.load(Psych.dump(t1)) + assert_equal t1, t2 + assert_cycle t1 + end + def test_referenced_hash_with_ivar a = [1,2,3,4,5] t1 = [HashWithCustomInit.new(a)] |