Transfer closed for httpd parent and subrequest double bailout
オープン
まだ誰も着手していません。
- #17653 @bukka による — マージされずにクローズ
Bug
SAPI: apache2handler
- 主要言語
- C
- スター
- 40.4k
- フォーク
- 8.2k
- 平均マージ
- 2日 13時間
- マージ済み PR(30日)
- 96
説明
Description
This can be recreated by setting memory_limit to 128MB and hitting virtual.php script that calls subrequest.php script
The following code:
<?php
// subrequest.php
$mep = str_repeat('test', 256 * 1000000);
echo count($mem);
<?php
// virtual.php
virtual('/subrequest.php');
echo "test";
$mep = str_repeat('test', 256 * 1000000);
echo "virtual!\n";
Resulted in this curl result:
* transfer closed with outstanding read data remaining
* Closing connection 0
curl: (18) transfer closed with outstanding read data remaining
The error logs showed following:
[Sat Jan 18 14:07:36.162766 2025] [php:error] [pid 86048:tid 86048] [client 127.0.0.1:48464] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted at /home/jakub/prog/php/81/Zend/zend_string.h:163 (tried to allocate 1024000032 bytes) in /home/jakub/prog/php/tests/apache2handler/basic/subrequest.php on line 3
[Sat Jan 18 14:07:36.162842 2025] [php:error] [pid 86048:tid 86048] [client 127.0.0.1:48464] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted at /home/jakub/prog/php/81/Zend/zend_string.h:163 (tried to allocate 1024000032 bytes) in /home/jakub/prog/php/tests/apache2handler/basic/virtual.php on line 7
/home/jakub/prog/php/81/Zend/zend_alloc.c(393) : Bailed out without a bailout address!
But I expected normal output with 2 errors for allowed memory size
I tested this with 8.1 but it will be the same for supported version I'm sure - will double check later.
PHP Version
PHP 8.1+
Operating System
Ubuntu 20.04
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
128MBのメモリ制限下で virtual.php から subrequest.php を呼び出して失敗を再現し、その後、Zend/zend_string.h と Zend/zend_alloc.c に報告されたパスを調べます。Apache の転送出力とエラー出力を、bailout-address の失敗や切り詰められたレスポンスがない、想定される2つのメモリ制限エラーと比較します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- apache, php
- 領域
- backend
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 25/100