From ca2840b5a573fb948f6638f733e9cbfc068d9be9 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 21 Oct 2015 17:31:18 -0700 Subject: [PATCH] Make hookErrorHandler() only care about serious signature errors Previously, it would send all manor of warnings to the error and error-json channels. This adds a lot of overhead due to AbuseFilter parse/eval errors. By passing immediately instead of after calling handleError(), that overhead is avoided. Since it still passes (e.g. returns false), any default PHP warning logging still applies. Change-Id: I18e60c09c2a48f2e26abab5d451bb52ea4ba7961 --- includes/Hooks.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/includes/Hooks.php b/includes/Hooks.php index a414562436..980d350c6b 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -232,8 +232,11 @@ class Hooks { /** * Handle PHP errors issued inside a hook. Catch errors that have to do - * with a function expecting a reference, and pass all others through to - * MWExceptionHandler::handleError() for default processing. + * with a function expecting a reference, missing arguments, or wrong argument + * types. Pass all others through to to the default error handler. + * + * This is useful for throwing errors for major callback invocation errors + * (with regard to parameter signature) which PHP just gives warnings for. * * @since 1.18 * @@ -243,13 +246,14 @@ class Hooks { * @return bool */ public static function hookErrorHandler( $errno, $errstr ) { - if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false ) { + if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false + || strpos( $errstr, 'Missing argument ' ) !== false + || strpos( $errstr, ' expects parameter ' ) !== false + ) { throw new MWHookException( $errstr, $errno ); } - // Delegate unhandled errors to the default MW handler - return call_user_func_array( - 'MWExceptionHandler::handleError', func_get_args() - ); + // Delegate unhandled errors to the default handlers + return false; } } -- 2.20.1