From 98fbd5247a1727230ec3c0d459d24fd07f5d2bd4 Mon Sep 17 00:00:00 2001 From: Alexander Momchilov Date: Fri, 22 Jul 2022 16:16:04 -0400 Subject: Raise specific error when an anchor isn't defined --- lib/psych/exception.rb | 7 +++++++ lib/psych/visitors/to_ruby.rb | 2 +- test/psych/test_hash.rb | 2 +- test/psych/test_merge_keys.rb | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/psych/exception.rb b/lib/psych/exception.rb index 04a9a90..d7469a4 100644 --- a/lib/psych/exception.rb +++ b/lib/psych/exception.rb @@ -13,6 +13,13 @@ module Psych end end + # Subclasses `BadAlias` for backwards compatibility + class AnchorNotDefined < BadAlias + def initialize anchor_name + super "An alias referenced an unknown anchor: #{anchor_name}" + end + end + class DisallowedClass < Exception def initialize action, klass_name super "Tried to #{action} unspecified class: #{klass_name}" diff --git a/lib/psych/visitors/to_ruby.rb b/lib/psych/visitors/to_ruby.rb index 0bf5198..cce5daf 100644 --- a/lib/psych/visitors/to_ruby.rb +++ b/lib/psych/visitors/to_ruby.rb @@ -323,7 +323,7 @@ module Psych end def visit_Psych_Nodes_Alias o - @st.fetch(o.anchor) { raise BadAlias, "Unknown alias: #{o.anchor}" } + @st.fetch(o.anchor) { raise AnchorNotDefined, o.anchor } end private diff --git a/test/psych/test_hash.rb b/test/psych/test_hash.rb index 88b520e..31eba85 100644 --- a/test/psych/test_hash.rb +++ b/test/psych/test_hash.rb @@ -124,7 +124,7 @@ module Psych end def test_raises_if_anchor_not_defined - assert_raise(Psych::BadAlias) do + assert_raise(Psych::AnchorNotDefined) do Psych.unsafe_load(<<~eoyml) --- foo: &foo diff --git a/test/psych/test_merge_keys.rb b/test/psych/test_merge_keys.rb index 8d2fcea..2f55a1e 100644 --- a/test/psych/test_merge_keys.rb +++ b/test/psych/test_merge_keys.rb @@ -117,7 +117,7 @@ development: bar: << : *foo eoyml - exp = assert_raise(Psych::BadAlias) { Psych.load(yaml, aliases: true) } + exp = assert_raise(Psych::AnchorNotDefined) { Psych.load(yaml, aliases: true) } assert_match 'foo', exp.message end -- cgit v1.2.1