ruby/psych

Confusing error: Unknown alias: foo (Psych::BadAlias)

eregon opened this issue · 2 comments

I tried running some script which parses some YAML file using aliases, and due to a recent psych being installed it fails like:

$ ruby -ryaml -e 'p YAML.load_file "tool/docker-configs.yaml"'            
/home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:432:in `visit_Psych_Nodes_Alias': Unknown alias: rpm (Psych::BadAlias)
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/visitor.rb:30:in `visit'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/visitor.rb:6:in `accept'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:35:in `accept'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:347:in `block in revive_hash'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:345:in `each'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:345:in `each_slice'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:345:in `revive_hash'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:169:in `visit_Psych_Nodes_Mapping'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/visitor.rb:30:in `visit'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/visitor.rb:6:in `accept'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:35:in `accept'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:347:in `block in revive_hash'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:345:in `each'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:345:in `each_slice'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:345:in `revive_hash'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:169:in `visit_Psych_Nodes_Mapping'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/visitor.rb:30:in `visit'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/visitor.rb:6:in `accept'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:35:in `accept'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:320:in `visit_Psych_Nodes_Document'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/visitor.rb:30:in `visit'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/visitor.rb:6:in `accept'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych/visitors/to_ruby.rb:35:in `accept'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych.rb:334:in `safe_load'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych.rb:369:in `load'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych.rb:671:in `block in load_file'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych.rb:670:in `open'
	from /home/eregon/.rubies/ruby-3.0.3/lib/ruby/gems/3.0.0/gems/psych-4.0.6/lib/psych.rb:670:in `load_file'
	from -e:1:in `<main>'

So it looks like recent Psych default to safe_load (kinda known).
But the error message is really confusing.
I think the error should say something like:

aliases are disabled by default in YAML safe parsing, pass aliases: true if you want to allow YAML aliases

This is fixed in #567 which was released in v5.0.0.