Transfer closed for httpd parent and subrequest double bailout
Personne n'a encore pris cette issue.
- #17653 par @bukka — fermée sans fusion
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.2k
- Merge moyen
- 2 j 13 h
- PR mergées (30 j)
- 96
Description
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez l’échec en faisant appeler subrequest.php par virtual.php avec une limite de mémoire de 128MB, puis inspectez les chemins signalés dans Zend/zend_string.h et Zend/zend_alloc.c. Comparez la sortie de transfert et d’erreur d’Apache avec les deux erreurs de limite de mémoire attendues, sans échec de bailout-address ni réponse tronquée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- apache, php
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 25/100