aboutsummaryrefslogtreecommitdiffstats
path: root/includes
diff options
context:
space:
mode:
authorAaron Schulz <aschulz@wikimedia.org>2015-10-21 17:31:18 -0700
committerOri Livneh <ori@wikimedia.org>2015-10-21 17:49:31 -0700
commitca2840b5a573fb948f6638f733e9cbfc068d9be9 (patch)
treead788d57e7c8c24b7f3ce663e508ed92b17ef384 /includes
parent9140248018538a05560edf6ee32fcc4268d9d597 (diff)
downloadmediawikicore-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')
-rw-r--r--includes/Hooks.php18
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;
}
}