Check for valid user info before calling Linker::userLink() in Linker::revUserTools()
authorBill Pirkle <bpirkle@wikimedia.org>
Mon, 10 Jun 2019 22:26:24 +0000 (17:26 -0500)
committerBill Pirkle <bpirkle@wikimedia.org>
Mon, 10 Jun 2019 23:22:17 +0000 (18:22 -0500)
If an actor table row has neither an actor_user nor an actor_name
value (which should not have happened, but did), we would call
Linker::revUserTools() with no valid user info. This generated
log noise and displayed bad output. Instead, check for valid user
info, and fall back to a default message if necessary. T225469
exists for correcting the underlying bad data, but adding this
check is still prudent.

Bug: T224368
Change-Id: Ib9816d8b87b995f4fe465004acd608225728e391

includes/Linker.php

index ae50c66..63afcfc 100644 (file)
@@ -1118,17 +1118,22 @@ class Linker {
         * @return string HTML
         */
        public static function revUserTools( $rev, $isPublic = false, $useParentheses = true ) {
-               if ( $rev->isDeleted( Revision::DELETED_USER ) && $isPublic ) {
-                       $link = wfMessage( 'rev-deleted-user' )->escaped();
-               } elseif ( $rev->userCan( Revision::DELETED_USER ) ) {
+               if ( $rev->userCan( Revision::DELETED_USER ) &&
+                       ( !$rev->isDeleted( Revision::DELETED_USER ) || !$isPublic )
+               ) {
                        $userId = $rev->getUser( Revision::FOR_THIS_USER );
                        $userText = $rev->getUserText( Revision::FOR_THIS_USER );
-                       $link = self::userLink( $userId, $userText )
-                               . self::userToolLinks( $userId, $userText, false, 0, null,
-                                       $useParentheses );
-               } else {
+                       if ( $userId && $userText ) {
+                               $link = self::userLink( $userId, $userText )
+                                       . self::userToolLinks( $userId, $userText, false, 0, null,
+                                               $useParentheses );
+                       }
+               }
+
+               if ( !isset( $link ) ) {
                        $link = wfMessage( 'rev-deleted-user' )->escaped();
                }
+
                if ( $rev->isDeleted( Revision::DELETED_USER ) ) {
                        return ' <span class="history-deleted mw-userlink">' . $link . '</span>';
                }