From 5dd7d84e2106065c63bd057d8be3c31f74bf9aed Mon Sep 17 00:00:00 2001 From: Matthieu Aubry <mattab@users.noreply.github.com> Date: Tue, 23 Aug 2016 14:09:25 +1200 Subject: [PATCH] PHP 7: when there is a fatal error in API request processing, display the original error in the api response (#10406) * PHP 7: when there is a fatal error in API request processing, display the original error * PHP 7 compatibility --- core/API/ApiRenderer.php | 7 ++++++- core/API/ResponseBuilder.php | 10 +++++++--- core/Tracker/Response.php | 2 +- plugins/API/Renderer/Console.php | 7 ++++++- plugins/API/Renderer/Csv.php | 7 ++++++- plugins/API/Renderer/Html.php | 7 ++++++- plugins/API/Renderer/Json.php | 7 ++++++- plugins/API/Renderer/Original.php | 8 +++++++- plugins/API/Renderer/Php.php | 7 ++++++- plugins/API/Renderer/Rss.php | 7 ++++++- plugins/API/Renderer/Xml.php | 7 ++++++- .../tests/Framework/Mock/Tracker/Response.php | 2 +- plugins/BulkTracking/tests/Unit/ResponseTest.php | 2 +- tests/PHPUnit/Unit/Tracker/ResponseTest.php | 2 +- 14 files changed, 66 insertions(+), 16 deletions(-) diff --git a/core/API/ApiRenderer.php b/core/API/ApiRenderer.php index 36f84e63c2..fc1c11d736 100644 --- a/core/API/ApiRenderer.php +++ b/core/API/ApiRenderer.php @@ -39,7 +39,12 @@ abstract class ApiRenderer return 'Success:' . $message; } - public function renderException($message, \Exception $exception) + /** + * @param $message + * @param Exception|\Throwable $exception + * @return mixed + */ + public function renderException($message, $exception) { return $message; } diff --git a/core/API/ResponseBuilder.php b/core/API/ResponseBuilder.php index d6b6cb9664..bc90598f89 100644 --- a/core/API/ResponseBuilder.php +++ b/core/API/ResponseBuilder.php @@ -138,10 +138,10 @@ class ResponseBuilder } /** - * @param Exception $e + * @param Exception|\Throwable $e * @return Exception */ - private function decorateExceptionWithDebugTrace(Exception $e) + private function decorateExceptionWithDebugTrace($e) { // If we are in tests, show full backtrace if (defined('PIWIK_PATH_TEST_TO_ROOT')) { @@ -157,7 +157,11 @@ class ResponseBuilder return $e; } - private function formatExceptionMessage(Exception $exception) + /** + * @param Exception|\Throwable $exception + * @return string + */ + private function formatExceptionMessage($exception) { $message = $exception->getMessage(); if (\Piwik_ShouldPrintBackTraceWithMessage()) { diff --git a/core/Tracker/Response.php b/core/Tracker/Response.php index 2b4a6f3b49..bf8c6f9955 100644 --- a/core/Tracker/Response.php +++ b/core/Tracker/Response.php @@ -175,7 +175,7 @@ class Response return $e->getMessage(); } - protected function logExceptionToErrorLog(Exception $e) + protected function logExceptionToErrorLog($e) { error_log(sprintf("Error in Piwik (tracker): %s", str_replace("\n", " ", $this->getMessageFromException($e)))); } diff --git a/plugins/API/Renderer/Console.php b/plugins/API/Renderer/Console.php index 40794ef8e9..98e3d01d1f 100644 --- a/plugins/API/Renderer/Console.php +++ b/plugins/API/Renderer/Console.php @@ -16,7 +16,12 @@ use Piwik\DataTable; class Console extends ApiRenderer { - public function renderException($message, \Exception $exception) + /** + * @param $message + * @param Exception|\Throwable $exception + * @return string + */ + public function renderException($message, $exception) { self::sendHeader(); diff --git a/plugins/API/Renderer/Csv.php b/plugins/API/Renderer/Csv.php index 468a3a2588..77caa50bce 100644 --- a/plugins/API/Renderer/Csv.php +++ b/plugins/API/Renderer/Csv.php @@ -23,7 +23,12 @@ class Csv extends ApiRenderer return "message\n" . $message; } - public function renderException($message, \Exception $exception) + /** + * @param $message + * @param Exception|\Throwable $exception + * @return string + */ + public function renderException($message, $exception) { Common::sendHeader('Content-Type: text/html; charset=utf-8', true); return 'Error: ' . $message; diff --git a/plugins/API/Renderer/Html.php b/plugins/API/Renderer/Html.php index 4037c35b4e..48acbb355f 100644 --- a/plugins/API/Renderer/Html.php +++ b/plugins/API/Renderer/Html.php @@ -16,7 +16,12 @@ use Piwik\DataTable; class Html extends ApiRenderer { - public function renderException($message, \Exception $exception) + /** + * @param $message + * @param Exception|\Throwable $exception + * @return string + */ + public function renderException($message, $exception) { Common::sendHeader('Content-Type: text/plain; charset=utf-8', true); diff --git a/plugins/API/Renderer/Json.php b/plugins/API/Renderer/Json.php index 1dffa1f45f..5037b30fbe 100644 --- a/plugins/API/Renderer/Json.php +++ b/plugins/API/Renderer/Json.php @@ -31,7 +31,12 @@ class Json extends ApiRenderer return $this->applyJsonpIfNeeded($result); } - public function renderException($message, \Exception $exception) + /** + * @param $message + * @param Exception|\Throwable $exception + * @return string + */ + public function renderException($message, $exception) { $exceptionMessage = str_replace(array("\r\n", "\n"), "", $message); diff --git a/plugins/API/Renderer/Original.php b/plugins/API/Renderer/Original.php index a0730acf2b..96895b8012 100644 --- a/plugins/API/Renderer/Original.php +++ b/plugins/API/Renderer/Original.php @@ -18,7 +18,13 @@ class Original extends ApiRenderer return true; } - public function renderException($message, \Exception $exception) + /** + * @param $message + * @param \Exception|\Throwable $exception + * @throws \Exception|\Throwable + * @return void + */ + public function renderException($message, $exception) { throw $exception; } diff --git a/plugins/API/Renderer/Php.php b/plugins/API/Renderer/Php.php index 81a512122d..5823137569 100644 --- a/plugins/API/Renderer/Php.php +++ b/plugins/API/Renderer/Php.php @@ -23,7 +23,12 @@ class Php extends ApiRenderer return $this->serializeIfNeeded($success); } - public function renderException($message, \Exception $exception) + /** + * @param $message + * @param Exception|\Throwable $exception + * @return string + */ + public function renderException($message, $exception) { $message = array('result' => 'error', 'message' => $message); diff --git a/plugins/API/Renderer/Rss.php b/plugins/API/Renderer/Rss.php index 3ee1c287bc..5bbcac78aa 100644 --- a/plugins/API/Renderer/Rss.php +++ b/plugins/API/Renderer/Rss.php @@ -16,7 +16,12 @@ use Piwik\DataTable; class Rss extends ApiRenderer { - public function renderException($message, \Exception $exception) + /** + * @param $message + * @param \Exception|\Throwable $exception + * @return string + */ + public function renderException($message, $exception) { self::sendHeader('plain'); diff --git a/plugins/API/Renderer/Xml.php b/plugins/API/Renderer/Xml.php index 99092ee057..4a1f0247d7 100644 --- a/plugins/API/Renderer/Xml.php +++ b/plugins/API/Renderer/Xml.php @@ -24,7 +24,12 @@ class Xml extends ApiRenderer "</result>"; } - public function renderException($message, \Exception $exception) + /** + * @param $message + * @param \Exception|\Throwable $exception + * @return string + */ + public function renderException($message, $exception) { return '<?xml version="1.0" encoding="utf-8" ?>' . "\n" . "<result>\n" . diff --git a/plugins/BulkTracking/tests/Framework/Mock/Tracker/Response.php b/plugins/BulkTracking/tests/Framework/Mock/Tracker/Response.php index e514745ddb..c595a278c6 100644 --- a/plugins/BulkTracking/tests/Framework/Mock/Tracker/Response.php +++ b/plugins/BulkTracking/tests/Framework/Mock/Tracker/Response.php @@ -13,7 +13,7 @@ use Exception; class Response extends \Piwik\Plugins\BulkTracking\Tracker\Response { - protected function logExceptionToErrorLog(Exception $e) + protected function logExceptionToErrorLog($e) { // prevent from writing to console in tests } diff --git a/plugins/BulkTracking/tests/Unit/ResponseTest.php b/plugins/BulkTracking/tests/Unit/ResponseTest.php index 38c3c0cce1..91dbfc2079 100644 --- a/plugins/BulkTracking/tests/Unit/ResponseTest.php +++ b/plugins/BulkTracking/tests/Unit/ResponseTest.php @@ -15,7 +15,7 @@ use Exception; class TestResponse extends Response { - protected function logExceptionToErrorLog(Exception $e) + protected function logExceptionToErrorLog($e) { // prevent console from outputting the error_log message } diff --git a/tests/PHPUnit/Unit/Tracker/ResponseTest.php b/tests/PHPUnit/Unit/Tracker/ResponseTest.php index 93d8a70ad4..4d902ada08 100644 --- a/tests/PHPUnit/Unit/Tracker/ResponseTest.php +++ b/tests/PHPUnit/Unit/Tracker/ResponseTest.php @@ -16,7 +16,7 @@ use Exception; class TestResponse extends Response { - protected function logExceptionToErrorLog(Exception $e) + protected function logExceptionToErrorLog($e) { // prevent console from outputting the error_log message } -- GitLab