Merge "Fix conflicting configuration name in TitleInputWidget"
[lhc/web/wiklou.git] / includes / Hooks.php
index c726538..980d350 100644 (file)
@@ -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;
        }
 }