DiffDaily Deep & Concise - OSS変更の定点観測
トップに戻る

puma/puma

https://github.com/puma/puma

Puma 7.2.1:PROXYプロトコルv1パーシングの脆弱性修正

Puma 7.2.1では、PROXYプロトコルv1のパーシングに存在する2つのセキュリティ上の問題が修正されました。細工された入力による悪用防止のための制限・アンカリングの追加と、keep-alive接続での複数回パーシングを防ぐ変更が含まれています。

2026年05月27日 Claude Sonnet 4.6

PROXY Protocol v1 パーサーのセキュリティ修正とバグ修正

Puma 7.2.1 のバックポートとして、PROXY Protocol v1 パーサーに存在した複数の問題が修正されました。CRLF なしに最大長(107バイト)に達した場合の接続エラー処理の追加、正規表現アンカーの `^` から `\A` への変更、そしてキープアライブ接続における2リクエスト目以降へのプロトコル再適用防止が含まれます。

2026年05月27日 Claude Sonnet 4.6

Puma 8.0.2:PROXYプロトコル処理の2つのセキュリティ修正

Puma 8.0.2のリリースノートがmainブランチに追加されました。PROXYプロトコルv1の正規表現アンカー漏れによるインジェクション脆弱性と、keep-alive接続でのヘッダースプーフィング脆弱性の2件の修正が含まれる予定です。

2026年05月27日 Claude Sonnet 4.6

v8.0.2:PROXYプロトコル実装のセキュリティ修正

Puma 8.0.2がリリースされ、PROXYプロトコルv1の処理に関する2つのセキュリティ上の問題が修正されました。正規表現へのアンカー追加と最大行長制限によるインジェクション防止と、keep-alive接続でのヘッダー解析を最初のリクエストのみに限定することによるスプーフィング防止が含まれています。

2026年05月27日 Claude Sonnet 4.6

PROXY Protocol v1 パーサーの複数バグ修正

Puma 8.0.2 バックポートとして、PROXY Protocol v1 パーサーの3つのバグが修正されました。最大長に達しても CRLF のないヘッダーへの未定義動作、Keep-Alive 接続での2リクエスト目の誤パース、HTTP ボディ内の偽PROXYラインへの誤マッチという問題が、定数追加・正規表現アンカー修正・初期化ロジック変更によって解消されています。

2026年05月27日 Claude Sonnet 4.6

テスト出力のノイズを除去する複数の改善

Pumaのテスト実行時に余分な出力が混入していた問題を複数箇所で解消するPRです。makeのビルドログ抑制(MAKEFLAGSへの-sフラグ追加)、非推奨警告のcapture_ioによるキャプチャと内容検証、テストヘルパーのキーワード引数化、そしてclusterワーカーのIOError捕捉範囲のSystemCallErrorへの拡張が含まれます。

2026年05月27日 Claude Sonnet 4.6

`on_booted`/`on_restart`/`on_stopped` の廃止をPuma v9へ延期

Puma v8で削除予定だった非推奨コールバック `on_booted`/`on_restart`/`on_stopped` の廃止をv9に延期しました。警告メッセージを「Puma v9」と明示するよう修正し、v9到達時にCIが自動的に失敗するバージョンガードテストを追加することで、削除漏れを防ぐ仕組みを導入しています。

2026年05月27日 Claude Sonnet 4.6

アンダースコアヘッダーのハードニングオプションを追加

Pumaに`allow_underscore_headers`設定が追加されました。`false`に設定するとアンダースコアを含むリクエストヘッダーを破棄し、Rackのenv正規化を悪用したヘッダーインジェクション攻撃を防ぎます。デフォルトは互換性のため`true`ですが、`puma.underscore_headers` envキーで監査しながら`false`への移行が推奨されています。

2026年05月27日 Claude Sonnet 4.6

`Configuration#clamp` の二重呼び出しを修正し、冪等性を保証

`Launcher` が `Configuration#clamp` を `initialize` と `run` の両方で呼び出し、`single {}` / `cluster {}` コールバックが二重実行されていたバグを修正。`run` 側の冗長な呼び出しを削除するとともに、`clamp` 自体に `@clamped` フラグによる冪等性ガードとdeprecation warningを追加し、Puma v9でのraiseへの段階的移行を準備しています。

2026年05月25日 Claude Sonnet 4.6

Puma 8.0.1リリース:`prune_bundler`のBUNDLE_*環境変数消失バグを修正

Puma 8.0.1がリリースされました。主な修正は、`prune_bundler`のre-exec時に`BUNDLE_WITHOUT`などのユーザー設定の`BUNDLE_*`環境変数が消去されてワーカーがクラッシュするバグの解消です。あわせて、デバッグ無効時の不要な文字列生成を避けるためデバッグログをブロック渡しに変更するパフォーマンス改善も含まれています。

2026年04月27日 Claude Sonnet 4.6

`prune_bundler` 再実行時にユーザー設定の `BUNDLE_*` 環境変数が消失する問題を修正

`prune_bundler` 使用時にPumaが `puma-wild` 経由で再実行される際、`Bundler.with_unbundled_env` が全 `BUNDLE_*` 変数を除去するにもかかわらず `BUNDLE_GEMFILE` と `BUNDLE_APP_CONFIG` の2変数しか復元されていませんでした。この修正により、`Bundler.original_env` から `BUNDLE_*` プレフィックスを持つ全変数を一括復元するようになり、`BUNDLE_WITHOUT` 等のユーザー設定変数が失われてワーカーがクラッシュする問題が解消されました。

2026年04月27日 Claude Sonnet 4.6

デバッグログのブロック化によるメッセージ生成コストの最適化

デバッグが無効な場合でも文字列補間が評価される問題を解消するため、`Puma::LogWriter#debug` がブロック引数に対応しました。ブロックで渡された場合はデバッグ有効時のみ `yield` されるため、不要な文字列アロケーションを回避できます。引数形式の呼び出しとの後方互換性は維持されています。

2026年04月10日 Claude Sonnet 4.6

Puma v8.0.0リリース: IPv6デフォルト化とスレッドプール制御の強化

Puma 8.0.0(コードネーム "Into the Arena")がリリースされました。IOバウンドリクエストが通常のスレッド上限を超えて処理できる `max_io_threads` と `env["puma.mark_as_io_bound"]` APIの追加、ランタイムでのスレッドプール変更API、シングル・クラスターモード別の設定DSLブロックが主な新機能です。破壊的変更としてデフォルトバインドアドレスが `0.0.0.0` から `::` (IPv6)に変更されており、IPv6が利用可能な環境での動作確認が必要です。

2026年04月09日 Claude Sonnet 4.6

デュアルスタックソケット接続時の `REMOTE_ADDR` にIPv4アドレスを正しく表示する

Pumaのデフォルトバインドアドレスが `::` に変更された副作用として、デュアルスタックソケット経由のIPv4接続で `REMOTE_ADDR` に `::ffff:127.0.0.1` 形式が表示される問題を修正。`Client#peerip` に `unmap_ipv6` メソッドを追加し、IPv4マップドIPv6アドレスを元のIPv4形式に変換して返すようにしました。

2026年04月07日 Claude Sonnet 4.6

プロダクション環境のデフォルトバインドアドレスをIPv6(`::`)に変更

Pumaのプロダクション環境のデフォルトバインドアドレスが `0.0.0.0` から `::` に変更されました。単純な定数変更ではなく、`Socket.getifaddrs` によるランタイム検査でIPv6の可用性を確認し、非対応環境では `0.0.0.0` へ自動フォールバックする設計が採用されています。`::` は `0.0.0.0` のスーパーセットとして機能するため、既存のIPv4ワークフローへの影響はありません。

2026年03月26日 Claude Sonnet 4.6

`above_http_content_limit` の重複コードを1つのメソッドに集約

puma/pumaにて、[#3582](https://github.com/puma/puma/pull/3582) で導入された重複コードを整理するリファクタリングが行われました。`setup_body` と `write_chunk` の2箇所に存在した「バッファクリア・ステータスコード設定・例外送出」の重複処理が、新設の `raise_above_http_content_limit` メソッドに一本化されています。

2026年03月24日 Claude Sonnet 4.6

フェーズドリスタート時にstaleなワーカー0からforkしてしまうバグを修正

`fork_worker`モードでワーカー0が事前に再起動された状態でフェーズドリスタートを行うと、staleなワーカー0からforkが連鎖し古いコードが残り続けるバグを修正。`@workers`配列へのワーカー追加を末尾追記(`<<`)からインデックス指定挿入(`Array#insert`)に変えるだけの1行修正で、配列の順序とワーカーインデックスの整合性を保証します。

2026年03月09日 Claude Sonnet 4.6

`shutdown_debug` に `on_force` オプションを追加し、強制シャットダウン時のみバックトレースを出力可能に

Pumaのシャットダウンデバッグ機能 `shutdown_debug` に `on_force: true` オプションが追加されました。従来はシャットダウン開始直後に全スレッドをダンプしていましたが、新オプションを使うと `force_shutdown_after` のタイムアウト超過後に残存するスレッドのみをダンプするため、シャットダウンをブロックしている原因スレッドを特定しやすくなります。あわせてバックトレースダンプの責務が `Server` から `ThreadPool` に移管されるリファクタリングも行われています。

2026年03月09日 Claude Sonnet 4.6

`env["puma.mark_as_io_bound"]` によるIO待ちスレッドのプール分離機能を実装

Pumaのスレッドプールに「IOバウンドスレッド」という概念を導入し、`env["puma.mark_as_io_bound"].call` でリクエストをIO待ち専用スレッドとしてマークできるようになりました。IOバウンドスレッドは `max_threads` のカウントから外れ、新たな `max_io_threads` 設定でその上限を管理できます。ストリーミングやプロキシのような長時間IO待ちが発生するリクエストが通常のCPUバウンドなリクエストのスループットを圧迫しなくなります。

2026年03月08日 Claude Sonnet 4.6

シングルモードとクラスタモードの設定フックを追加

Pumaに `single` と `cluster` 設定フックが追加され、実行モードに応じた条件分岐が可能になりました。フォーク非対応のJVMなどのライブラリ初期化を、単一の設定ファイル内でモード別に記述できます。

2026年02月23日 Claude Sonnet 4.5
1 2 次へ

© 2026 DiffDaily - Powered by AI

タケユー・ウェブ