set_exception_handler not restored if calling exit within itself
Personne n'a encore pris cette issue.
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.2k
- Merge moyen
- 2 j 13 h
- PR mergées (30 j)
- 96
Description
Description
What was fixed https://github.com/php/php-src/commit/3301d9602a2307007858c299c41795d3d95e3843 https://github.com/php/php-src/issues/13446#issuecomment-1991549384 bc it was broken from 8.3.0-8.3.4 is still broken if the exception handler itself calls exit.
https://3v4l.org/HkWfh
without exit: https://3v4l.org/FTWQf
The following code:
<?php
declare(strict_types=1);
function foo($e) {
var_dump( set_exception_handler('foo') );
restore_exception_handler();
echo "---" . PHP_EOL;
exit;
}
set_exception_handler('foo');
register_shutdown_function(function () {
var_dump( set_exception_handler(null) );
});
strlen(null);
Resulted in this output:
NULL
---
NULL
But I expected this output instead:
NULL
---
string(3) "foo"
This matters, because since PHP 8.3, the exit code of the exit() call in exception handler is used as exit code of PHP
@iluuu1994
PHP Version
PHP 8.3.0+
Operating System
No response
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
Commencez par reproduire le comportement avec le script PHP fourni et comparez les cas avec exit et sans exit des exemples 3v4l liés. Suivez l’interaction entre set_exception_handler(), restore_exception_handler(), register_shutdown_function() et exit dans le runtime PHP. Le travail est terminé lorsque le callback de shutdown observe le handler "foo" restauré quand exit est appelé à l’intérieur de l’exception handler.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- c, 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
- 38/100