diff --git a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionSubscriber.php index b8dc94e..93d7471 100644 --- a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionSubscriber.php @@ -19,6 +19,7 @@ use Drupal\Core\Utility\Error; use Symfony\Component\Debug\Exception\FlattenException; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; @@ -171,15 +172,12 @@ protected function onJson(GetResponseForExceptionEvent $event) { // Display the message if the current error reporting level allows this type // of message to be displayed, - $message = error_displayable($error) ? 'A fatal error occurred: ' . $exception->getMessage() : ''; - - // @todo We would prefer to use JsonResponse here, but existing code and - // tests are not prepared for parsing a JSON response when there are quotes - // or other values that would cause escaping issues. Instead, return a - // plain string and mark it as such. - $response = new Response($message, Response::HTTP_INTERNAL_SERVER_ERROR, [ - 'Content-type' => 'text/plain' - ]); + $data = []; + if (error_displayable($error) && $message = $exception->getMessage()) { + $data = [$message]; + } + + $response = new JsonResponse($data, Response::HTTP_INTERNAL_SERVER_ERROR); if ($exception instanceof HttpExceptionInterface) { $response->setStatusCode($exception->getStatusCode()); }