Dislay an error if an exception occurs in the error handler

Related to #1598
This commit is contained in:
ArthurHoaro 2020-10-20 18:32:46 +02:00
parent d8030c8155
commit 5c06c0870f
3 changed files with 19 additions and 7 deletions

View file

@ -463,3 +463,12 @@ function t($text, $nText = '', $nb = 1, $domain = 'shaarli')
{
return dn__($domain, $text, $nText, $nb);
}
/**
* Converts an exception into a printable stack trace string.
*/
function exception2text(Throwable $e): string
{
return $e->getMessage() . PHP_EOL . $e->getFile() . $e->getLine() . PHP_EOL . $e->getTraceAsString();
}

View file

@ -28,10 +28,7 @@ public function __invoke(Request $request, Response $response, \Throwable $throw
// Internal error (any other Throwable)
if ($this->container->conf->get('dev.debug', false)) {
$this->assignView('message', $throwable->getMessage());
$this->assignView(
'stacktrace',
nl2br(get_class($throwable) .': '. PHP_EOL . $throwable->getTraceAsString())
);
$this->assignView('stacktrace', exception2text($throwable));
} else {
$this->assignView('message', t('An unexpected error occurred.'));
}

View file

@ -151,6 +151,12 @@
$this->get('/history', '\Shaarli\Api\Controllers\HistoryController:getHistory')->setName('getHistory');
})->add('\Shaarli\Api\ApiMiddleware');
$response = $app->run(true);
$app->respond($response);
try {
$response = $app->run(true);
$app->respond($response);
} catch (Throwable $e) {
die(nl2br(
'An unexpected error happened, and the error template could not be displayed.' . PHP_EOL . PHP_EOL .
exception2text($e)
));
}