set_exception_handler not restored if calling exit within itself
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C
- Sterne
- 40.4k
- Forks
- 8.1k
- Ø Merge
- 2 T. 13 Std.
- Gemergte PRs (30 T.)
- 96
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das Verhalten mit dem bereitgestellten PHP-Skript zu reproduzieren, und vergleiche die exit- und Nicht-exit-Fälle aus den verlinkten 3v4l-Beispielen. Verfolge die Interaktion zwischen set_exception_handler(), restore_exception_handler(), register_shutdown_function() und exit in der PHP-Laufzeitumgebung. Die Aufgabe ist erfüllt, wenn der Shutdown-Callback den wiederhergestellten "foo"-Handler beobachtet, wenn exit innerhalb des Exception-Handlers aufgerufen wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- c, php
- Bereich
- backend
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 38/100