[Debug] Reset previous exception handler ealier to prevent infinite loop

This commit is contained in:
Nicolas Grekas 2018-03-16 17:37:42 +01:00
parent ffd088a38f
commit f7e1bb05e2
2 changed files with 17 additions and 3 deletions

View File

@ -544,15 +544,16 @@ class ErrorHandler
}
}
}
$exceptionHandler = $this->exceptionHandler;
$this->exceptionHandler = null;
try {
if (null !== $this->exceptionHandler) {
return \call_user_func($this->exceptionHandler, $exception);
if (null !== $exceptionHandler) {
return \call_user_func($exceptionHandler, $exception);
}
$handlerException = $handlerException ?: $exception;
} catch (\Exception $handlerException) {
} catch (\Throwable $handlerException) {
}
$this->exceptionHandler = null;
if ($exception === $handlerException) {
self::$reservedMemory = null; // Disable the fatal error handler
throw $exception; // Give back $exception to the native handler

View File

@ -530,4 +530,17 @@ class ErrorHandlerTest extends TestCase
throw $e;
}
}
/**
* @expectedException \Exception
*/
public function testCustomExceptionHandler()
{
$handler = new ErrorHandler();
$handler->setExceptionHandler(function ($e) use ($handler) {
$handler->handleException($e);
});
$handler->handleException(new \Exception());
}
}