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

puma/puma

https://github.com/puma/puma

Fix `pool_capacity` leak when extra IO threads exit

I/O バウンドスレッドが上限を超えて終了した際に `@spawned` が減算されず `pool_capacity` がリークするバグを修正し、正確なスレッド数管理とプール容量回復を実現しました。

2026年07月04日 gpt-oss-120b

Sub-second worker_check_interval を受け入れるように変更

Puma の worker_check_interval が整数限定から Float 受容へ変更され、サブセカンド間隔でのワーカー監視が可能になり、ハング検知が高速化しました。

2026年07月04日 gpt-oss-120b

空チャンクサイズに対するバリデーション追加で500エラーを防止

Puma が空チャンクサイズで例外を起こす問題を、正規表現バリデーションと具体的エラーメッセージで捕捉し、500 エラーを防ぎ 400 系に変換しました。

2026年06月23日 gpt-oss-120b

Flaky test_update_thread_pool_min_max の安定化

テスト `test_update_thread_pool_min_max` のフレークを、スリープを 0.001 s から 0.1 s に延長し解消。タイミング依存テストの安定化という設計判断が示された。

2026年06月09日 gpt-oss-120b

notify_safely のロック競合を解消し、ワーカー停止ハングを防止

notify_safely が IO のロックと競合してワーカー停止がハングする問題を、IO#syswrite に置き換えることで解消し、シグナルハンドラから安全に呼び出せるようにした変更です。

2026年06月07日 gpt-oss-120b

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
1 2 次へ

© 2026 DiffDaily - Powered by AI

タケユー・ウェブ