2022/07/13分のコミットです。
CHANGELOGにのったコミットは以下の通りです。
activejob/CHANGELOG.md
Change ActiveRecord::Coders::YAMLColumn default to safe_load
activerecord/lib/active_record.rb
、
activerecord/lib/active_record/coders/yaml_column.rb
の修正です。
Active RecordのYAML serialized columnsのdeserialize処理にYAML.safe_load
を使用するよう修正しています。元々はYAML.unsafe_load
を使用していたのですが、unsafe_load
だとRubyとして実行出来る不正な値が指定された場合にRemote Code Executionが出来てしまう可能性があった為。
引き続きYAML.safe_load
を使用したい場合はconfig.active_record.use_yaml_unsafe_load
にtrueを指定すれば使用出来るようになっています。また、YAML.safe_load
のpermitted_classes
を指定したい場合は、config.active_record.yaml_column_permitted_classes
に値を指定すれば使用されるようになっています。
activerecord/lib/active_record/connection_adapters/pool_manager.rb
の修正です。
shard mappingを保持する変数の変数名を適切な名前に修正しています。
Move configuration to the right section
rails guideのConfiguring Rails Applications
の修正です。
Active Recordに関するconfigがActive Storageのセクションに記載されていたのをActive Recordのセクションに移動しています。
Improve performance by removing respond_to? from runtime code
activerecord/lib/active_record/coders/yaml_column.rb
の修正です。
yaml_load
メソッドの中でunsafe_load
メソッドが使えるかをチェックしていたのを、unsafe_load
が使えるかどうかによってメソッドの定義をそもそも変えるよう修正しています。respond_to?
は速い処理ではないので、実行時に呼ばれるのを避ける為。
Preserve job.enqueued_at
timestamp precision
activejob/lib/active_job/core.rb
の修正です。
serialized jobsのenqueued_at
でミリ秒の値まで保持するよう修正しています。
Remove unnecessary initializers
activerecord/lib/active_record/railtie.rb
の修正です。
不要なconfigの設定処理を削除しています。
Allow Symbols by default in YAML serialized columns
activerecord/lib/active_record.rb
の修正です。
YAML serialized columnsで使用出来るRubyのclassにSymbolを追加しています。Ruby 3.1ではデフォルトでSymbolが使えるようになっており、他のバージョンでも同じ挙動になるようにする為。
Fix cases where CTE's are not supported
activerecord/test/cases/relation/merging_test.rb
、
activerecord/test/cases/relation/with_test.rb
の修正です。
Common Table Expressionをサポートしていないバージョン(MySQL 8.0より下)の場合にテストが通るよう修正しています。