なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2022/07/13)

2022/07/13分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

activejob/CHANGELOG.md


Change ActiveRecord::Coders::YAMLColumn default to safe_load

activerecord/lib/active_record.rbactiverecord/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_loadpermitted_classesを指定したい場合は、config.active_record.yaml_column_permitted_classesに値を指定すれば使用されるようになっています。

参考: [CVE-2022-32224] Possible RCE escalation bug with Serialized Columns in Active Record - Security Announcements - Ruby on Rails Discussions


Fix ivar name in PoolManager

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.rbactiverecord/test/cases/relation/with_test.rbの修正です。

Common Table Expressionをサポートしていないバージョン(MySQL 8.0より下)の場合にテストが通るよう修正しています。