diff options
author | Aaron Schulz <aschulz@wikimedia.org> | 2015-10-21 17:31:18 -0700 |
---|---|---|
committer | Ori Livneh <ori@wikimedia.org> | 2015-10-21 17:49:31 -0700 |
commit | ca2840b5a573fb948f6638f733e9cbfc068d9be9 (patch) | |
tree | ad788d57e7c8c24b7f3ce663e508ed92b17ef384 /includes/Hooks.php | |
parent | 9140248018538a05560edf6ee32fcc4268d9d597 (diff) | |
download | mediawikicore-ca2840b5a573fb948f6638f733e9cbfc068d9be9.tar.gz mediawikicore-ca2840b5a573fb948f6638f733e9cbfc068d9be9.zip |
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
Diffstat (limited to 'includes/Hooks.php')
-rw-r--r-- | includes/Hooks.php | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/includes/Hooks.php b/includes/Hooks.php index a4145624361b..980d350c6b98 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; } } |