Merge "Paranoia, escape image alignment parameters before outputting."
[lhc/web/wiklou.git] / includes / exception / MWExceptionHandler.php
index 78a5df9..00dca9d 100644 (file)
@@ -161,8 +161,8 @@ class MWExceptionHandler {
         *
         * @param int $level Error level raised
         * @param string $message
-        * @param string $file
-        * @param int $line
+        * @param string|null $file
+        * @param int|null $line
         * @return bool
         *
         * @see logError()
@@ -173,9 +173,7 @@ class MWExceptionHandler {
                global $wgPropagateErrors;
 
                if ( in_array( $level, self::$fatalErrorTypes ) ) {
-                       return call_user_func_array(
-                               'MWExceptionHandler::handleFatalError', func_get_args()
-                       );
+                       return self::handleFatalError( ...func_get_args() );
                }
 
                // Map error constant to error name (reverse-engineer PHP error
@@ -233,12 +231,12 @@ class MWExceptionHandler {
         *
         * @since 1.25
         *
-        * @param int $level Error level raised
-        * @param string $message Error message
-        * @param string $file File that error was raised in
-        * @param int $line Line number error was raised at
-        * @param array $context Active symbol table point of error
-        * @param array $trace Backtrace at point of error (undocumented HHVM
+        * @param int|null $level Error level raised
+        * @param string|null $message Error message
+        * @param string|null $file File that error was raised in
+        * @param int|null $line Line number error was raised at
+        * @param array|null $context Active symbol table point of error
+        * @param array|null $trace Backtrace at point of error (undocumented HHVM
         *     feature)
         * @return bool Always returns false
         */
@@ -276,12 +274,21 @@ class MWExceptionHandler {
                        return false;
                }
 
-               $msg = "[{exception_id}] PHP Fatal Error: {$message}";
+               $url = WebRequest::getGlobalRequestURL();
+               $msgParts = [
+                       '[{exception_id}] {exception_url}   PHP Fatal Error',
+                       ( $line || $file ) ? ' from' : '',
+                       $line ? " line $line" : '',
+                       ( $line && $file ) ? ' of' : '',
+                       $file ? " $file" : '',
+                       ": $message",
+               ];
+               $msg = implode( '', $msgParts );
 
                // Look at message to see if this is a class not found failure
                // HHVM: Class undefined: foo
                // PHP5: Class 'foo' not found
-               if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/", $msg ) ) {
+               if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/", $message ) ) {
                        // phpcs:disable Generic.Files.LineLength
                        $msg = <<<TXT
 {$msg}
@@ -308,9 +315,10 @@ TXT;
                                'code' => $level,
                                'file' => $file,
                                'line' => $line,
-                               'trace' => static::redactTrace( $trace ),
+                               'trace' => self::prettyPrintTrace( self::redactTrace( $trace ) ),
                        ],
-                       'exception_id' => wfRandomString( 8 ),
+                       'exception_id' => WebRequest::getRequestId(),
+                       'exception_url' => $url,
                        'caught_by' => self::CAUGHT_BY_HANDLER
                ] );