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

[ruby/psych] Raise specific error when aliases are not enabled

https://github.com/ruby/psych/commit/0c11ddcf46
This commit is contained in:
Alexander Momchilov 2022-07-21 15:07:39 -04:00 committed by git
parent 71f89c2874
commit 54219ae8c4
9 changed files with 17 additions and 10 deletions

View file

@ -307,7 +307,7 @@ module Psych
# A Psych::DisallowedClass exception will be raised if the yaml contains a
# class that isn't in the +permitted_classes+ list.
#
# A Psych::BadAlias exception will be raised if the yaml contains aliases
# A Psych::AliasesNotEnabled exception will be raised if the yaml contains aliases
# but the +aliases+ keyword argument is set to false.
#
# +filename+ will be used in the exception message if any exception is raised

View file

@ -6,6 +6,13 @@ module Psych
class BadAlias < Exception
end
# Subclasses `BadAlias` for backwards compatibility
class AliasesNotEnabled < BadAlias
def initialize
super "Alias parsing was not enabled. To enable it, pass `aliases: true` to `Psych::load` or `Psych::safe_load`."
end
end
class DisallowedClass < Exception
def initialize action, klass_name
super "Tried to #{action} unspecified class: #{klass_name}"

View file

@ -427,7 +427,7 @@ module Psych
class NoAliasRuby < ToRuby
def visit_Psych_Nodes_Alias o
raise BadAlias, "Unknown alias: #{o.anchor}"
raise AliasesNotEnabled
end
end
end

View file

@ -51,7 +51,7 @@ module Psych
:UseVersion => true, :UseHeader => true, :SortKeys => true
)
))
rescue Psych::DisallowedClass, Psych::BadAlias
rescue Psych::DisallowedClass, Psych::BadAlias, Psych::AliasesNotEnabled
assert_to_yaml obj, yaml, :unsafe_load
end
@ -61,7 +61,7 @@ module Psych
def assert_parse_only( obj, yaml )
begin
assert_equal obj, Psych::load( yaml )
rescue Psych::DisallowedClass, Psych::BadAlias
rescue Psych::DisallowedClass, Psych::BadAlias, Psych::AliasesNotEnabled
assert_equal obj, Psych::unsafe_load( yaml )
end
assert_equal obj, Psych::parse( yaml ).transform
@ -79,7 +79,7 @@ module Psych
assert_equal(obj, Psych.load(v.tree.yaml))
assert_equal(obj, Psych::load(Psych.dump(obj)))
assert_equal(obj, Psych::load(obj.to_yaml))
rescue Psych::DisallowedClass, Psych::BadAlias
rescue Psych::DisallowedClass, Psych::BadAlias, Psych::AliasesNotEnabled
assert_equal(obj, Psych.unsafe_load(v.tree.yaml))
assert_equal(obj, Psych::unsafe_load(Psych.dump(obj)))
assert_equal(obj, Psych::unsafe_load(obj.to_yaml))

View file

@ -68,7 +68,7 @@ module Psych
def test_recursive_array_uses_alias
@list << @list
assert_raise(BadAlias) do
assert_raise(AliasesNotEnabled) do
Psych.load(Psych.dump(@list), aliases: false)
end
end

View file

@ -125,7 +125,7 @@ eoyml
h = { }
h["recursive_reference"] = h
assert_raise(BadAlias) do
assert_raise(AliasesNotEnabled) do
Psych.load(Psych.dump(h), aliases: false)
end
end

View file

@ -117,7 +117,7 @@ development:
bar:
<< : *foo
eoyml
exp = assert_raise(Psych::BadAlias) { Psych.load yaml }
exp = assert_raise(Psych::BadAlias) { Psych.load(yaml, aliases: true) }
assert_match 'foo', exp.message
end

View file

@ -46,7 +46,7 @@ module Psych
foo = Foo.new(nil)
foo.parent = foo
assert_raise(BadAlias) do
assert_raise(AliasesNotEnabled) do
Psych.load(Psych.dump(foo), permitted_classes: [Foo], aliases: false)
end
end

View file

@ -28,7 +28,7 @@ module Psych
b: *ABC
YAML
assert_raise(Psych::BadAlias) do
assert_raise(Psych::AliasesNotEnabled) do
Psych.safe_load(yaml_with_aliases)
end
end