最近Ruby的YAML库(Psych 4)有了变化,如果包含别名或尝试实例化未指定的类,则会导致“不安全”的YAML失败。这在多个地方都有讨论,比如像这个StackOverflow问题。
我正在尝试弄清楚如何告诉派生的
据我所知,文档很少,阅读后,这是我能想到的唯一合理的尝试:
我正在尝试弄清楚如何告诉派生的
yaml/store
库允许加载不安全的YAML,或提供我的允许类列表。据我所知,文档很少,阅读后,这是我能想到的唯一合理的尝试:
require 'date'
require 'yaml/store'
# 1. These options work perfectly with YAML.load_file, but not with YAML::Store
# 2. These options are not needed in Psych < 4.0
yaml_opts = { aliases: true, permitted_classes: [Time, Date, Symbol] }
store = YAML::Store.new 'log.yml', yaml_opts
data = store.transaction { store[:entries] }
p data
使用这个YAML文件:
# log.yml
:entries:
- :timestamp: 2018-07-09 00:00:00.000000000 +03:00
:action: Comment
:comment: Started logging
在Psych 4中会失败,在Psych 3中成功。
# Gemfile
source "https://rubygems.org"
gem 'psych', '>= 4.0' # fail
# gem 'psych', '< 4.0' # pass
作为一个相关的轶事,文档中演示的例子,在尝试使用 store.transaction { store["people"] }
加载时也会失败。