The Daily WTF 日本語 フォロー CodeSOD:偽りが真であるとき Lillith は、"dry_run" 機能を持つ Ruby on Rails API に新しいツールを統合しました。この機能により、サービスは変更を適用せずに計算を行うことができました。問題が発生したのは、新しいツールが JSON 形式で {"dry_run": false} を送信したにもかかわらず、サービスがそれを true と解釈したためです。この予期せぬ動作は、文字列や nil の入力を処理するように設計されたヘルパーメソッド param_true? に起因していました。メソッドのロジック、特に !param_value は、実際のブール値の false を誤って true と評価しました。この問題は、POST/PATCH/PUT リクエストがブール値を含む JSON ボディを送信し始めるまで、おそらく見過ごされていました。以前は、GET リクエストはおそらくパラメータの文字列表現のみを送信していました。値を取得した後に params.key?(param_name) を冗長にチェックしていたことも、煩わしい点として指摘されました。根本的な問題は、ヘルパーメソッドがブール値の false を誤って処理していたことでした。これにより、dry_run フラグが一貫して誤認識されました。元の設計におけるパラメータの型に関する仮定が、根本原因であったようです。 CodeSOD: When False is True thedailywtf.com The Daily WTF 日本語 RSS thenote.app
{"dry_run": false}を送信したにもかかわらず、サービスがそれを true と解釈したためです。この予期せぬ動作は、文字列や nil の入力を処理するように設計されたヘルパーメソッドparam_true?に起因していました。メソッドのロジック、特に!param_valueは、実際のブール値のfalseを誤ってtrueと評価しました。この問題は、POST/PATCH/PUT リクエストがブール値を含む JSON ボディを送信し始めるまで、おそらく見過ごされていました。以前は、GET リクエストはおそらくパラメータの文字列表現のみを送信していました。値を取得した後にparams.key?(param_name)を冗長にチェックしていたことも、煩わしい点として指摘されました。根本的な問題は、ヘルパーメソッドがブール値の false を誤って処理していたことでした。これにより、dry_runフラグが一貫して誤認識されました。元の設計におけるパラメータの型に関する仮定が、根本原因であったようです。