}
/**
- * Handle PHP errors issued inside a hook. Catch errors that have to do with
- * a function expecting a reference, and let all others pass through.
+ * Handle PHP errors issued inside a hook. Catch errors that have to do
+ * with a function expecting a reference, missing arguments, or wrong argument
+ * types. Pass all others through to to the default error handler.
*
- * This REALLY should be protected... but it's public for compatibility
+ * 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
*
* @param int $errno Error number (unused)
* @param string $errstr Error message
* @throws MWHookException If the error has to do with the function signature
- * @return bool Always returns false
+ * @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 handlers
return false;
}
}