1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/psych] Fix custom marshalization with symbolize_names: true

https://github.com/ruby/psych/commit/ee26f26ab5
This commit is contained in:
Jean Boussier 2021-02-11 18:30:58 +01:00 committed by Hiroshi SHIBATA
parent 155cd7fd2a
commit c110ade0d2
No known key found for this signature in database
GPG key ID: F9CF13417264FAC2
2 changed files with 11 additions and 3 deletions

View file

@ -339,7 +339,7 @@ module Psych
list
end
def revive_hash hash, o
def revive_hash hash, o, tagged= false
o.children.each_slice(2) { |k,v|
key = accept(k)
val = accept(v)
@ -366,7 +366,7 @@ module Psych
hash[key] = val
end
else
if @symbolize_names
if !tagged && @symbolize_names
key = key.to_sym
elsif !@freeze
key = deduplicate(key)
@ -404,7 +404,7 @@ module Psych
def revive klass, node
s = register(node, klass.allocate)
init_with(s, revive_hash({}, node), node)
init_with(s, revive_hash({}, node, true), node)
end
def init_with o, h, node

View file

@ -51,5 +51,13 @@ module Psych
assert(PsychCustomMarshalable === loaded)
assert_equal(2, loaded.foo)
end
def test_init_symbolize_names
obj = PsychCustomMarshalable.new(1)
loaded = Psych.load(Psych.dump(obj), symbolize_names: true)
assert(PsychCustomMarshalable === loaded)
assert_equal(2, loaded.foo)
end
end
end