From 20717fd0310c637ec6c5ef2ca06c17474011129b Mon Sep 17 00:00:00 2001 From: daniel Date: Wed, 3 Jul 2019 18:49:58 +0200 Subject: [PATCH] LogFormatter::formatParameterValue: handle bad user names This makes LogFormatter more robust against bad user names coming from broken log records. Bug: T224368 Change-Id: Ifce9e86bddba274182253cd25338766e8093d6ad --- includes/logging/LogFormatter.php | 8 +++-- .../includes/logging/LogFormatterTest.php | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/includes/logging/LogFormatter.php b/includes/logging/LogFormatter.php index 3e942ae08d..e8dd8982b5 100644 --- a/includes/logging/LogFormatter.php +++ b/includes/logging/LogFormatter.php @@ -613,9 +613,13 @@ class LogFormatter { $this->setShowUserToolLinks( false ); $user = User::newFromName( $value ); - $value = Message::rawParam( $this->makeUserLink( $user ) ); - $this->setShowUserToolLinks( $saveLinkFlood ); + if ( !$user ) { + $value = $this->msg( 'empty-username' )->text(); + } else { + $value = Message::rawParam( $this->makeUserLink( $user ) ); + $this->setShowUserToolLinks( $saveLinkFlood ); + } break; case 'title': $title = Title::newFromText( $value ); diff --git a/tests/phpunit/includes/logging/LogFormatterTest.php b/tests/phpunit/includes/logging/LogFormatterTest.php index f444d40c3e..4bb9d5ab1a 100644 --- a/tests/phpunit/includes/logging/LogFormatterTest.php +++ b/tests/phpunit/includes/logging/LogFormatterTest.php @@ -1,5 +1,7 @@ assertEquals( $expected, $logParam ); } + /** + * @covers LogFormatter::newFromEntry + * @covers LogFormatter::getActionText + */ + public function testLogParamsTypeUserLink_empty() { + $params = [ '4:user-link:userLink' => ':' ]; + + $entry = $this->newLogEntry( 'param', $params ); + $formatter = LogFormatter::newFromEntry( $entry ); + + $this->context->setLanguage( Language::factory( 'qqx' ) ); + $formatter->setContext( $this->context ); + + $logParam = $formatter->getActionText(); + $this->assertContains( '(empty-username)', $logParam ); + } + /** * @covers LogFormatter::newFromEntry * @covers LogFormatter::getActionText @@ -248,6 +267,20 @@ class LogFormatterTest extends MediaWikiLangTestCase { $this->assertEquals( $expected, $logParam ); } + /** + * @covers LogFormatter::getPerformerElement + */ + public function testGetPerformerElement() { + $entry = $this->newLogEntry( 'param', [] ); + $entry->setPerformer( new UserIdentityValue( 1328435, 'Test', 0 ) ); + + $formatter = LogFormatter::newFromEntry( $entry ); + $formatter->setContext( $this->context ); + + $element = $formatter->getPerformerElement(); + $this->assertContains( 'User:Test', $element ); + } + /** * @covers LogFormatter::newFromEntry * @covers LogFormatter::getComment -- 2.20.1