From: Aaron Schulz Date: Thu, 22 Oct 2015 00:31:18 +0000 (-0700) Subject: Make hookErrorHandler() only care about serious signature errors X-Git-Tag: 1.31.0-rc.0~9304 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_ecrire%28%22suivi_revisions%22%29%20.%20%22?a=commitdiff_plain;h=ca2840b5a573fb948f6638f733e9cbfc068d9be9;p=lhc%2Fweb%2Fwiklou.git 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 --- 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; } }