From 67bb87edc31327bc79b3cbb939b2b72e722723ed Mon Sep 17 00:00:00 2001 From: Matthew Wire Date: Sun, 10 May 2020 12:03:25 +0100 Subject: [PATCH] Trigger fatalErrorHandler for PEAR errors and for logs with severity ERROR or higher --- CRM/Core/Error.php | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/CRM/Core/Error.php b/CRM/Core/Error.php index 206570e51b..864996b057 100644 --- a/CRM/Core/Error.php +++ b/CRM/Core/Error.php @@ -184,6 +184,19 @@ class CRM_Core_Error extends PEAR_ErrorStack { } } + // Use the custom fatalErrorHandler if defined + if ($config->fatalErrorHandler && function_exists($config->fatalErrorHandler)) { + $name = $config->fatalErrorHandler; + $vars = [ + 'pearError' => $pearError, + ]; + $ret = $name($vars); + if ($ret) { + // the call has been successfully handled so we just exit + self::abend(CRM_Core_Error::FATAL_ERROR); + } + } + $template->assign_by_ref('error', $error); $errorDetails = CRM_Core_Error::debug('', $error, FALSE); $template->assign_by_ref('errorDetails', $errorDetails); @@ -204,7 +217,7 @@ class CRM_Core_Error extends PEAR_ErrorStack { exit; } $runOnce = TRUE; - self::abend(1); + self::abend(CRM_Core_Error::FATAL_ERROR); } /** @@ -559,6 +572,18 @@ class CRM_Core_Error extends PEAR_ErrorStack { } $file_log->close(); + // Use the custom fatalErrorHandler if defined + if (in_array($priority, [PEAR_LOG_EMERG, PEAR_LOG_ALERT, PEAR_LOG_CRIT, PEAR_LOG_ERR])) { + if ($config->fatalErrorHandler && function_exists($config->fatalErrorHandler)) { + $name = $config->fatalErrorHandler; + $vars = [ + 'debugLogMessage' => $message, + 'priority' => $priority, + ]; + $name($vars); + } + } + if (!isset(\Civi::$statics[__CLASS__]['userFrameworkLogging'])) { // Set it to FALSE first & then try to set it. This is to prevent a loop as calling // $config->userFrameworkLogging can trigger DB queries & under log mode this -- 2.25.1