diff options
Diffstat (limited to 'test/psych/test_safe_load.rb')
-rw-r--r-- | test/psych/test_safe_load.rb | 81 |
1 files changed, 73 insertions, 8 deletions
diff --git a/test/psych/test_safe_load.rb b/test/psych/test_safe_load.rb index f3fdb9b9a2..82a5f19c36 100644 --- a/test/psych/test_safe_load.rb +++ b/test/psych/test_safe_load.rb @@ -22,6 +22,8 @@ module Psych def test_explicit_recursion x = [] x << x + assert_equal(x, Psych.safe_load(Psych.dump(x), whitelist_classes: [], whitelist_symbols: [], aliases: true)) + # deprecated interface assert_equal(x, Psych.safe_load(Psych.dump(x), [], [], true)) end @@ -30,6 +32,16 @@ module Psych assert_raises(Psych::DisallowedClass) do Psych.safe_load yml end + assert_equal( + :foo, + Psych.safe_load( + yml, + whitelist_classes: [Symbol], + whitelist_symbols: [:foo] + ) + ) + + # deprecated interface assert_equal(:foo, Psych.safe_load(yml, [Symbol], [:foo])) end @@ -38,32 +50,71 @@ module Psych assert_safe_cycle :foo end assert_raises(Psych::DisallowedClass) do + Psych.safe_load '--- !ruby/symbol foo', whitelist_classes: [] + end + + # deprecated interface + assert_raises(Psych::DisallowedClass) do Psych.safe_load '--- !ruby/symbol foo', [] end - assert_safe_cycle :foo, [Symbol] - assert_safe_cycle :foo, %w{ Symbol } + + assert_safe_cycle :foo, whitelist_classes: [Symbol] + assert_safe_cycle :foo, whitelist_classes: %w{ Symbol } + assert_equal :foo, Psych.safe_load('--- !ruby/symbol foo', whitelist_classes: [Symbol]) + + # deprecated interface assert_equal :foo, Psych.safe_load('--- !ruby/symbol foo', [Symbol]) end def test_foo assert_raises(Psych::DisallowedClass) do + Psych.safe_load '--- !ruby/object:Foo {}', whitelist_classes: [Foo] + end + + # deprecated interface + assert_raises(Psych::DisallowedClass) do Psych.safe_load '--- !ruby/object:Foo {}', [Foo] end + assert_raises(Psych::DisallowedClass) do assert_safe_cycle Foo.new end + assert_kind_of(Foo, Psych.safe_load(Psych.dump(Foo.new), whitelist_classes: [Foo])) + + # deprecated interface assert_kind_of(Foo, Psych.safe_load(Psych.dump(Foo.new), [Foo])) end X = Struct.new(:x) def test_struct_depends_on_sym - assert_safe_cycle(X.new, [X, Symbol]) + assert_safe_cycle(X.new, whitelist_classes: [X, Symbol]) assert_raises(Psych::DisallowedClass) do - cycle X.new, [X] + cycle X.new, whitelist_classes: [X] end end def test_anon_struct + assert Psych.safe_load(<<-eoyml, whitelist_classes: [Struct, Symbol]) +--- !ruby/struct + foo: bar + eoyml + + assert_raises(Psych::DisallowedClass) do + Psych.safe_load(<<-eoyml, whitelist_classes: [Struct]) +--- !ruby/struct + foo: bar + eoyml + end + + assert_raises(Psych::DisallowedClass) do + Psych.safe_load(<<-eoyml, whitelist_classes: [Symbol]) +--- !ruby/struct + foo: bar + eoyml + end + end + + def test_deprecated_anon_struct assert Psych.safe_load(<<-eoyml, [Struct, Symbol]) --- !ruby/struct foo: bar @@ -84,14 +135,28 @@ module Psych end end + def test_safe_load_default_fallback + assert_nil Psych.safe_load("") + end + + def test_safe_load + assert_equal %w[a b], Psych.safe_load("- a\n- b") + end + + def test_safe_load_raises_on_bad_input + assert_raises(Psych::SyntaxError) { Psych.safe_load("--- `") } + end + private - def cycle object, whitelist = [] - Psych.safe_load(Psych.dump(object), whitelist) + def cycle object, whitelist_classes: [] + Psych.safe_load(Psych.dump(object), whitelist_classes: whitelist_classes) + # deprecated interface test + Psych.safe_load(Psych.dump(object), whitelist_classes) end - def assert_safe_cycle object, whitelist = [] - other = cycle object, whitelist + def assert_safe_cycle object, whitelist_classes: [] + other = cycle object, whitelist_classes: whitelist_classes assert_equal object, other end end |