From a09fd050ec830a5803c723b56778228b26341462 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Fri, 14 Mar 2025 17:16:00 +0800 Subject: [PATCH] MDL-84879 core: Remove stacktrace args from exceptions --- lib/classes/router/response/exception_response.php | 5 ++++- lib/setup.php | 2 ++ lib/tests/classes/router/route_testcase.php | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/classes/router/response/exception_response.php b/lib/classes/router/response/exception_response.php index 8d850097ae0..3db139b2f11 100644 --- a/lib/classes/router/response/exception_response.php +++ b/lib/classes/router/response/exception_response.php @@ -123,7 +123,10 @@ abstract class exception_response extends \core\router\schema\response\response ): array { $data = [ 'message' => $exception->getMessage(), - 'stacktrace' => $exception->getTrace(), + 'stacktrace' => array_map( + fn ($frame): array => array_filter($frame, fn ($key) => $key !== 'args', ARRAY_FILTER_USE_KEY), + $exception->getTrace(), + ), ]; if (is_a($exception, \moodle_exception::class)) { diff --git a/lib/setup.php b/lib/setup.php index a120f6697fc..a42ef9cd643 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -769,9 +769,11 @@ if (!isset($CFG->debugdisplay)) { // Some parts of Moodle cannot display errors and debug at all. ini_set('display_errors', '0'); ini_set('log_errors', '1'); + ini_set('zend.exception_ignore_args', '1'); } else if (empty($CFG->debugdisplay)) { ini_set('display_errors', '0'); ini_set('log_errors', '1'); + ini_set('zend.exception_ignore_args', '1'); } else { // This is very problematic in XHTML strict mode! ini_set('display_errors', '1'); diff --git a/lib/tests/classes/router/route_testcase.php b/lib/tests/classes/router/route_testcase.php index 04d4334d925..d7f4783764b 100644 --- a/lib/tests/classes/router/route_testcase.php +++ b/lib/tests/classes/router/route_testcase.php @@ -429,6 +429,9 @@ abstract class route_testcase extends \advanced_testcase { $payload = $this->decode_response($response); $this->assertObjectHasProperty('message', $payload); $this->assertObjectHasProperty('stacktrace', $payload); + foreach ($payload->stacktrace as $frame) { + $this->assertObjectNotHasProperty('args', $frame); + } } /** -- 2.43.0