-
Notifications
You must be signed in to change notification settings - Fork 211
Closed
Description
Overview
Upon upgrading from Psych 3.3.2 to 4.0.0, I discovered all of my YAML files which have keys as synbols will no longer load.
Steps to Recreate
Here's a Ruby snippet that reproduces the error:
# frozen_string_literal: true
require "bundler/inline"
require "tempfile"
gemfile true do
source "https://rubygems.org"
gem "psych", "4.0.0"
end
Tempfile.open "example" do |file|
file.write %(:text: "Hello.")
file.rewind
puts "YAML Contents: #{YAML.load_file file}"
endIf you save the above as snippet.rb and run as ruby snippet.rb, you'll end up with the following stack dump:
Psych Stack Dump
/Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/class_loader.rb:99:in `find': Tried to load unspecified class: Symbol (Psych::DisallowedClass)
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/class_loader.rb:28:in `load'
from (eval):2:in `symbol'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/class_loader.rb:32:in `symbolize'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/class_loader.rb:84:in `symbolize'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/scalar_scanner.rb:74:in `tokenize'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:65:in `deserialize'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:128:in `visit_Psych_Nodes_Scalar'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/visitor.rb:30:in `visit'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/visitor.rb:6:in `accept'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:35:in `accept'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:344:in `block in revive_hash'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:343:in `each'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:343:in `each_slice'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:343:in `revive_hash'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:167:in `visit_Psych_Nodes_Mapping'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/visitor.rb:30:in `visit'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/visitor.rb:6:in `accept'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:35:in `accept'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:318:in `visit_Psych_Nodes_Document'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/visitor.rb:30:in `visit'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/visitor.rb:6:in `accept'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych/visitors/to_ruby.rb:35:in `accept'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych.rb:334:in `safe_load'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych.rb:587:in `block in safe_load_file'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych.rb:586:in `open'
from /Users/bkuhlmann/.gem/ruby/3.0.1/gems/psych-4.0.0/lib/psych.rb:586:in `safe_load_file'
from /Users/bkuhlmann/Engineering/Misc/snippet.rb:18:in `block in <main>'
from /Users/bkuhlmann/.rubies/ruby-3.0.1/lib/ruby/3.0.0/tempfile.rb:317:in `open'
from /Users/bkuhlmann/Engineering/Misc/snippet.rb:15:in `<main>'
This behavior does not exist with Psych 3.3.2. You can swap 4.0.0 with 3.3.2 in the snippet above to see the error go away.
Desired Behavior
I would like to load YAML files that have symbols as keys without error.
Environment
- Ruby 3.0.1
- ARM 64, Darwin 20
jmdacruz, gyoganathan, developius and igaiga
Metadata
Metadata
Assignees
Labels
No labels