なるようになるブログ

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

rails commit log流し読み(2023/01/18)

2023/01/18分のコミットです。

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

activerecord/CHANGELOG.md


Use eval_gemfile to read .Gemfile

Gemfileの修正です。

ローカルの.GemfileをロードするのにBundlerのeval_gemfileメソッドを使用するよう修正しています。


Rename ::normalize to ::normalize_value_for

activerecord/lib/active_record/normalization.rbの修正です。

特定のattributeに関する値に対してnormalize処理を行うメソッドの名前をnormalizeからnormalize_value_forに変更しています。別にnormalizesというメソッドがあり、normalizenormalizesがほぼ同じ名前だと混乱の元になるのでは、という事でnormalize_value_forに変更されました。


Added integer width check to PostgreSQL::Quoting

Active Recordの、railtiesの修正です。

PostgreSQLのquote処理で、値が64bit signed integerの範囲外だった場合に、エラーとするよう修正しています。左記範囲を越えた場合、PostgreSQLはcolumn typeをnumericとして扱うようになります。integer valueとnumeric valueの比較処理は大変遅い処理になり、これがDoSにつながってしまう可能性がある為、デフォルトはエラーになるよう修正しています。なお、これを今まで通りエラーとしたくない場合は、config.active_record.raise_int_wider_than_64bitにfalseを指定すれば良いようになっています。

参考: [CVE-2022-44566] Possible Denial of Service Vulnerability in ActiveRecord's PostgreSQL adapter


Fix sec issue with _url_host_allowed?

actionpack/lib/action_controller/metal/redirecting.rbの修正です。

redirect_to(params[:some_param])のようにredirect_toに信頼出来ない値を直接指定している場合に、Open Redirect 出来てしまう問題があったのを修正しています。

参考: [CVE-2023-22797] Possible Open Redirect Vulnerability in Action Pack


Use string#split instead of regex for domain parts

actionpack/lib/action_dispatch/middleware/cookies.rbの修正です。

X_FORWARDED_HOST headerに加工された不正な値を指定した場合に、ReDoS出来てしまう可能性があったのを修正しています。

参考: [CVE-2023-22792] Possible ReDoS based DoS vulnerability in Action Dispatch


Avoid regex backtracking in Inflector.underscore

activesupport/lib/active_support/inflector/methods.rbの修正です。

String#underscoreActiveSupport::Inflector.underscoreに加工された不正な値を指定した場合に、Ruby 3.2未満の場合にReDoS出来てしまう可能性があったのを修正しています。

参考: [CVE-2023-22796] Possible ReDoS based DoS vulnerability in Active Support's underscore


Avoid regex backtracking on If-None-Match header

actionpack/lib/action_dispatch/http/cache.rbの修正です。

If-None-Match headerに加工された不正な値を指定した場合に、Ruby 3.2未満の場合にReDoS出来てしまう可能性があったのを修正しています。

[CVE-2023-22795] Possible ReDoS based DoS vulnerability in Action Dispatch


Make sanitize_as_sql_comment more strict

Active Recordの修正です。

Post.where(id: 1).annotate("#{params[:user_input]}")やPost.where(id: 1).optimizer_hints("#{params[:user_input]}")のように、annotateoptimizer_hints`等のメソッドを使って、SQLのコメントに加工された不正な値を指定しているような場合に、SQLインジェクション出来てしまう問題があったのを修正しています。


Fix rubocop violations

rubocopの設定に違反している箇所があったのを修正しています。


Make sure Enumerable#sum works with objects that implement #coerce without deprecation

activesupport/lib/active_support/core_ext/enumerable.rbの修正です。

独自にcoerceメソッドを定義してるクラスをEnumerable#sumメソッドに指定した場合に、本来不要なdeprecateメッセージが表示されてしまっていたのを修正しています。


Fixes rubocop errors

rubocopの設定に違反している箇所があったのを修正しています。


Fix optimizer hint test

activerecord/test/cases/adapters/mysql2/optimizer_hints_test.rbの修正です。

Make sanitize_as_sql_comment more strictの対応によりoptimizer hintのテストが壊れてしまったのを修正しています。


Run through AR Callbacks guide

rails guideのActive Record Callbacksの修正です。

guide全体について、言い回しの修正やexampleコードの追加などを行っています。


Make Active Storage setup a bit more clear [ci skip]

rails guideのActive Storage Overviewの修正です。

Setup項の言い回しの修正を行っています。


update example for ::normalize to ::normalize_value_for as per https://github.com/rails/rails/pull/47034

activerecord/lib/active_record/normalization.rbのdocの修正です。

Rename ::normalize to ::normalize_value_forで変更されたメソッドの古い名前を使用している箇所がdocにあったのを修正しています。


AR Basics guide now includes associations since #46909

rails guideのActive Record Basicsの修正です。

guideの内容について説明している箇所に、associationsについても説明されている旨説明を追加しています。


Merge pull request #46690 from adrianna-chang-shopify/ac-db-warning-reporting

Active Recordの修正です。

SQLのwarningが発生した場合に、そのwarningをreporting出来るよう修正しています。warningが発生した場合にどのようはアクションを行うかは、config.active_record.db_warnings_actionに指定出来るようなっており、:ignore:log:raise:report(Rails.error.reportを使用)、または custom procが指定出来るようになっています。また、ignoreしたいwarningはconfig.active_record.db_warnings_ignoreに指定出来るようになっています。

config.active_record.db_warnings_action = :raise

config.active_record.db_warnings_ignore = [
  /Invalid utf8mb4 character string/,
  "An exact warning message",
]

Merge pull request #47019 from yahonda/action_mailbox_test_isolated

actionmailbox/Rakefileの修正です。

Action Mailboxにテストを単体で実行する為のtest:isolated taskを追加しています。


Improve Rails' Shape friendliness (third pass)

actionpack/lib/action_controller/metal/url_for.rbactivesupport/lib/active_support/configurable.rbの修正です。

Improve Rails' Shape friendlinessの続きで、Object Shapesが効率的に使われるよう修正を行っています。