Bidi isolate user names in block error paramters
authorThalia <thalia.e.chan@googlemail.com>
Thu, 27 Jun 2019 18:24:52 +0000 (19:24 +0100)
committerThalia <thalia.e.chan@googlemail.com>
Fri, 5 Jul 2019 14:01:26 +0000 (15:01 +0100)
This fixes parameters returned by AbstractBlock::getBlockErrorParams,
but not those from ApiBlockInfoTrait.

Change-Id: I122017808766de1e9a9035f2f39a7b08607e56c1

includes/block/AbstractBlock.php
tests/phpunit/includes/Permissions/PermissionManagerTest.php
tests/phpunit/includes/TitlePermissionTest.php

index 0357f8d..d24a2a5 100644 (file)
@@ -513,10 +513,13 @@ abstract class AbstractBlock {
         * @return array
         */
        public function getBlockErrorParams( IContextSource $context ) {
+               $lang = $context->getLanguage();
+
                $blocker = $this->getBlocker();
                if ( $blocker instanceof User ) { // local user
                        $blockerUserpage = $blocker->getUserPage();
-                       $link = "[[{$blockerUserpage->getPrefixedText()}|{$blockerUserpage->getText()}]]";
+                       $blockerText = $lang->embedBidi( $blockerUserpage->getText() );
+                       $link = "[[{$blockerUserpage->getPrefixedText()}|{$blockerText}]]";
                } else { // foreign user
                        $link = $blocker;
                }
@@ -528,19 +531,18 @@ abstract class AbstractBlock {
 
                /* $ip returns who *is* being blocked, $intended contains who was meant to be blocked.
                 * This could be a username, an IP range, or a single IP. */
-               $intended = $this->getTarget();
-               $lang = $context->getLanguage();
+               $intended = (string)$this->getTarget();
 
                return [
                        $link,
                        $reason,
                        $context->getRequest()->getIP(),
-                       $this->getByName(),
+                       $lang->embedBidi( $this->getByName() ),
                        // TODO: SystemBlock replaces this with the system block type. Clean up
                        // error params so that this is not necessary.
                        $this->getId(),
                        $lang->formatExpiry( $this->getExpiry() ),
-                       (string)$intended,
+                       $lang->embedBidi( $intended ),
                        $lang->userTimeAndDate( $this->getTimestamp(), $context->getUser() ),
                ];
        }
index 88a3f43..3da73c1 100644 (file)
@@ -1105,8 +1105,8 @@ class PermissionManagerTest extends MediaWikiLangTestCase {
                ] );
                $this->user->mBlock->mTimestamp = 0;
                $this->assertEquals( [ [ 'autoblockedtext',
-                       '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
-                       'Useruser', null, 'infinite', '127.0.8.1',
+                       "[[User:Useruser|\u{202A}Useruser\u{202C}]]", 'no reason given', '127.0.0.1',
+                       "\u{202A}Useruser\u{202C}", null, 'infinite', '127.0.8.1',
                        $wgLang->timeanddate( wfTimestamp( TS_MW, $prev ), true ) ] ],
                        MediaWikiServices::getInstance()->getPermissionManager()->getPermissionErrors(
                                'move-target', $this->user, $this->title ) );
@@ -1130,8 +1130,8 @@ class PermissionManagerTest extends MediaWikiLangTestCase {
                        'expiry' => 10,
                ] );
                $this->assertEquals( [ [ 'blockedtext',
-                       '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
-                       'Useruser', null, '23:00, 31 December 1969', '127.0.8.1',
+                       "[[User:Useruser|\u{202A}Useruser\u{202C}]]", 'no reason given', '127.0.0.1',
+                       "\u{202A}Useruser\u{202C}", null, '23:00, 31 December 1969', '127.0.8.1',
                        $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ],
                        MediaWikiServices::getInstance()->getPermissionManager()
                                ->getPermissionErrors( 'move-target', $this->user, $this->title ) );
@@ -1150,8 +1150,8 @@ class PermissionManagerTest extends MediaWikiLangTestCase {
                ] );
 
                $errors = [ [ 'systemblockedtext',
-                       '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
-                       'Useruser', 'test', 'infinite', '127.0.8.1',
+                       "[[User:Useruser|\u{202A}Useruser\u{202C}]]", 'no reason given', '127.0.0.1',
+                       "\u{202A}Useruser\u{202C}", 'test', 'infinite', '127.0.8.1',
                        $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
 
                $this->assertEquals( $errors,
@@ -1208,8 +1208,8 @@ class PermissionManagerTest extends MediaWikiLangTestCase {
                ] );
 
                $errors = [ [ 'blockedtext-partial',
-                       '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
-                       'Useruser', null, '23:00, 31 December 1969', '127.0.8.1',
+                       "[[User:Useruser|\u{202A}Useruser\u{202C}]]", 'no reason given', '127.0.0.1',
+                       "\u{202A}Useruser\u{202C}", null, '23:00, 31 December 1969', '127.0.8.1',
                        $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
 
                $this->assertEquals( $errors,
@@ -1282,8 +1282,8 @@ class PermissionManagerTest extends MediaWikiLangTestCase {
                ] );
 
                $errors = [ [ 'blockedtext',
-                       '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
-                       'Useruser', null, 'infinite', '127.0.8.1',
+                       "[[User:Useruser|\u{202A}Useruser\u{202C}]]", 'no reason given', '127.0.0.1',
+                       "\u{202A}Useruser\u{202C}", null, 'infinite', '127.0.8.1',
                        $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
 
                $this->assertEquals( $errors,
index 150e2ed..e6cf8c8 100644 (file)
@@ -948,8 +948,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                ] );
                $this->user->mBlock->setTimestamp( 0 );
                $this->assertEquals( [ [ 'autoblockedtext',
-                               '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
-                               'Useruser', null, 'infinite', '127.0.8.1',
+                               "[[User:Useruser|\u{202A}Useruser\u{202C}]]", 'no reason given', '127.0.0.1',
+                               "\u{202A}Useruser\u{202C}", null, 'infinite', '127.0.8.1',
                                $wgLang->timeanddate( wfTimestamp( TS_MW, $prev ), true ) ] ],
                        $this->title->getUserPermissionsErrors( 'move-target',
                                $this->user ) );
@@ -970,8 +970,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                        'expiry' => 10,
                ] );
                $this->assertEquals( [ [ 'blockedtext',
-                               '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
-                               'Useruser', null, '23:00, 31 December 1969', '127.0.8.1',
+                               "[[User:Useruser|\u{202A}Useruser\u{202C}]]", 'no reason given', '127.0.0.1',
+                               "\u{202A}Useruser\u{202C}", null, '23:00, 31 December 1969', '127.0.8.1',
                                $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ],
                        $this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
                # $action != 'read' && $action != 'createaccount' && $user->isBlockedFrom( $this )
@@ -988,8 +988,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                ] );
 
                $errors = [ [ 'systemblockedtext',
-                               '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
-                               'Useruser', 'test', 'infinite', '127.0.8.1',
+                               "[[User:Useruser|\u{202A}Useruser\u{202C}]]", 'no reason given', '127.0.0.1',
+                               "\u{202A}Useruser\u{202C}", 'test', 'infinite', '127.0.8.1',
                                $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
 
                $this->assertEquals( $errors,
@@ -1034,8 +1034,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                ] );
 
                $errors = [ [ 'blockedtext-partial',
-                               '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
-                               'Useruser', null, '23:00, 31 December 1969', '127.0.8.1',
+                               "[[User:Useruser|\u{202A}Useruser\u{202C}]]", 'no reason given', '127.0.0.1',
+                               "\u{202A}Useruser\u{202C}", null, '23:00, 31 December 1969', '127.0.8.1',
                                $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
 
                $this->assertEquals( $errors,
@@ -1102,8 +1102,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                ] );
 
                $errors = [ [ 'blockedtext',
-                               '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
-                               'Useruser', null, 'infinite', '127.0.8.1',
+                               "[[User:Useruser|\u{202A}Useruser\u{202C}]]", 'no reason given', '127.0.0.1',
+                               "\u{202A}Useruser\u{202C}", null, 'infinite', '127.0.8.1',
                                $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
 
                $this->assertEquals( $errors,