Defect #35435

Psych 4: aliases in database.yml cause Psych::BadAlias exception

Added by Pavel Rosický about 1 year ago. Updated 6 months ago.

Status:ClosedStart date:
Priority:NormalDue date:
Assignee:Go MAEDA% Done:

0%

Category:Gems support
Target version:4.1.6
Resolution:Fixed Affected version:

Description

see for details
https://github.com/ruby/psych/pull/487
https://github.com/rails/rails/commit/1e56b1d1152e8ab74203db30625116844614cc78

patch

diff --git a/Gemfile b/Gemfile
index b83cd2215..8f6bbe946 100644
--- a/Gemfile
+++ b/Gemfile
@@ -52,7 +52,8 @@ require 'erb'
 require 'yaml'
 database_file = File.join(File.dirname(__FILE__), "config/database.yml")
 if File.exist?(database_file)
-  database_config = YAML::load(ERB.new(IO.read(database_file)).result)
+  yaml_config = ERB.new(IO.read(database_file)).result
+  database_config = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(yaml_config) : YAML.load(yaml_config)
   adapters = database_config.values.map {|c| c['adapter']}.compact.uniq
   if adapters.any?
     adapters.each do |adapter|

without this change, Psych 4 will break aliases in config/database.yml

production: &alias
  adapter: mysql2
  database: xxx

development: *alias

error

Cannot load database configuration: (Psych::BadAlias)
Unknown alias: alias


Related issues

Related to Redmine - Feature #36205: Ruby 3.1 support Closed

Associated revisions

Revision 21059
Added by Go MAEDA about 1 year ago

Psych 4: aliases in database.yml cause Psych::BadAlias exception (#35435).

Patch by Pavel Rosický.

Revision 21405
Added by Go MAEDA 6 months ago

Merged r21059 from trunk to 4.2-stable (#35435).

Revision 21407
Added by Go MAEDA 6 months ago

Merged r21059 from trunk to 4.1-stable (#35435).

History

#1 Updated by Go MAEDA about 1 year ago

  • Description updated (diff)
  • Target version set to 4.1.4

Confirmed the issue by adding the following line to Gemfile.local.

gem 'psych', '~> 4.0.0'

Setting the target version to 4.1.4.

#2 Updated by Go MAEDA about 1 year ago

  • Tracker changed from Patch to Defect
  • Subject changed from Psych 4 support to Psych 4: aliases in database.yml cause Psych::BadAlias exception
  • Status changed from New to Confirmed

#3 Updated by Go MAEDA about 1 year ago

  • Status changed from Confirmed to Resolved
  • Assignee set to Go MAEDA
  • Resolution set to Fixed

Committed the fix. Thank you.

#4 Updated by Alexander Meindl about 1 year ago

Hi,

plugin settings do not work with psych >= 4, too.

[6] Setting.plugin_redmine_messenger
  Setting Load (0.5ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'plugin_redmine_messenger' ORDER BY `settings`.`id` DESC LIMIT 1
Psych::DisallowedClass: Tried to load unspecified class: ActiveSupport::HashWithIndifferentAccess
from /Users/alex/.rbenv/versions/2.7.3/lib/ruby/gems/2.7.0/gems/psych-4.0.1/lib/psych/class_loader.rb:99:in `find'

The problem is caused by https://www.redmine.org/projects/redmine/repository/entry/trunk/app/models/setting.rb#L109

Tested with multiple plugins, Redmine 4.2.1 and Ruby 2.7.3 with

gem 'psych', '~> 4.0.0'

Some plugins are already using psych >= 4, see https://github.com/AlphaNodes/additionals/issues/107.

#5 Updated by Go MAEDA about 1 year ago

  • Target version changed from 4.1.4 to 4.2.3

#6 Updated by Go MAEDA 10 months ago

  • Target version changed from 4.2.3 to 5.0.0

#7 Updated by Go MAEDA 9 months ago

  • Status changed from Resolved to Closed

Alexander Meindl wrote:

Hi,

plugin settings do not work with psych >= 4, too.

[...]

The problem is caused by https://www.redmine.org/projects/redmine/repository/entry/trunk/app/models/setting.rb#L109

Tested with multiple plugins, Redmine 4.2.1 and Ruby 2.7.3 with

[...]

Some plugins are already using psych >= 4, see https://github.com/AlphaNodes/additionals/issues/107.

Thank you for reporting the issue. I have opened #36226.

#8 Updated by Go MAEDA 9 months ago

#9 Updated by Go MAEDA 6 months ago

  • Target version changed from 5.0.0 to 4.1.6

Also available in: Atom PDF