session_regenerate_id with custom handler and use_strict_mode generates three new session ids
- 主要言語
- C
- スター
- 40.4k
- フォーク
- 8.1k
- 平均マージ
- 2日 13時間
- マージ済み PR(30日)
- 96
説明
Description
If I have set session.use_strict_mode = 1 and I have a custom session handler which implements the validateId function, then invoking session_regenerate_id calls
customhandler->create_sid
customhandler->validateId
customhandler->create_sid
customhandler->validateId
customhandler->create_sid
customhandler->validateId
customhandler->create_sid
Looking at the source code for session_regenerate_id, I can see the bug
https://github.com/php/php-src/blob/PHP-8.0.27/ext/session/session.c#L2263
while (limit-- && PS(mod)->s_validate_sid(&PS(mod_data), PS(id)) == SUCCESS) {
Shouldn't this be
while (limit-- && PS(mod)->s_validate_sid(&PS(mod_data), PS(id)) == FAILURE) {
Note that this is the same code in master
PHP Version
PHP 8.0.27
Operating System
No response
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
ext/session/session.c の 2263 行付近にある session_regenerate_id ループから始め、session.use_strict_mode を有効にし、validateId を実装するカスタムハンドラーを使って動作を再現します。修正された検証フローを確認し、報告された create_sid と validateId のシーケンスに対するカバレッジを追加または更新します。完了の条件は、再生成によって余分な ID が繰り返し生成されなくなることです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- c, php
- 領域
- backend
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 25/100