8000 Version 4.0.0 fails with Psych::DisallowedClass with symbols for keys · Issue #490 · ruby/psych · GitHub
[go: up one dir, main page]

Skip to content

Version 4.0.0 fails with Psych::DisallowedClass with symbols for keys #490

@bkuhlmann

Description

@bkuhlmann

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}"
end

If 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0