X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FHooks.php;h=980d350c6b9864edeaa3a13b72ac5728cc1ad729;hb=cc8439be9d7760104c640e861a4226678032694b;hp=c726538c9932ce6cb7cd14cdc01b1ad10bcbfc1b;hpb=640766be224804eba5003c89fafd31dd5f10d49f;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Hooks.php b/includes/Hooks.php index c726538c99..980d350c6b 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -135,10 +135,6 @@ class Hooks { * returning null) is equivalent to returning true. */ public static function run( $event, array $args = array(), $deprecatedVersion = null ) { - $stats = RequestContext::getMain()->getStats(); - $metric = $stats->increment( 'hooks.' . $event ); - $metric->setSampleRate( 0.001 ); - foreach ( self::getHandlers( $event ) as $hook ) { // Turn non-array values into an array. (Can't use casting because of objects.) if ( !is_array( $hook ) ) { @@ -235,22 +231,29 @@ class Hooks { } /** - * 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; } }