Fix some double escaping, and some incorrect escaping for convert()
authorBrian Wolff <bawolff+wn@gmail.com>
Thu, 20 Sep 2018 06:28:40 +0000 (06:28 +0000)
committerKunal Mehta <legoktm@member.fsf.org>
Sat, 22 Sep 2018 00:27:44 +0000 (17:27 -0700)
convert() is weird and requires things to be escaped before it
is called.

This fixes a bunch of phan-taint-check warnings.

Change-Id: I422b313ca05ff61ae05e06856347cc0de832cc49

includes/preferences/DefaultPreferencesFactory.php
includes/specialpage/LoginSignupSpecialPage.php
includes/specialpage/PageQueryPage.php
includes/specials/SpecialAncientpages.php
includes/specials/SpecialFewestrevisions.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMostlinkedcategories.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUnwatchedpages.php
includes/specials/SpecialWantedcategories.php

index 0da8c45..555493a 100644 (file)
@@ -338,7 +338,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                                        $lang->userTimeAndDate( $userRegistration, $displayUser ),
                                        $lang->userDate( $userRegistration, $displayUser ),
                                        $lang->userTime( $userRegistration, $displayUser )
-                               )->parse(),
+                               )->text(),
                                'section' => 'personal/info',
                        ];
                }
index bf6c9bb..e39ec58 100644 (file)
@@ -611,7 +611,7 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage {
                        $benefitList = '';
                        for ( $benefitIdx = 1; $benefitIdx <= $benefitCount; $benefitIdx++ ) {
                                $headUnescaped = $this->msg( "createacct-benefit-head$benefitIdx" )->text();
-                               $iconClass = $this->msg( "createacct-benefit-icon$benefitIdx" )->escaped();
+                               $iconClass = $this->msg( "createacct-benefit-icon$benefitIdx" )->text();
                                $benefitList .= Html::rawElement( 'div', [ 'class' => "mw-number-text $iconClass" ],
                                        Html::rawElement( 'h3', [],
                                                $this->msg( "createacct-benefit-head$benefitIdx" )->escaped()
index ad66e31..2f15800 100644 (file)
@@ -55,8 +55,8 @@ abstract class PageQueryPage extends QueryPage {
 
                if ( $title instanceof Title ) {
                        $text = MediaWikiServices::getInstance()->getContentLanguage()->
-                               convert( $title->getPrefixedText() );
-                       return $this->getLinkRenderer()->makeLink( $title, $text );
+                               convert( htmlspecialchars( $title->getPrefixedText() ) );
+                       return $this->getLinkRenderer()->makeLink( $title, new HtmlArmor( $text ) );
                } else {
                        return Html::element( 'span', [ 'class' => 'mw-invalidtitle' ],
                                Linker::getInvalidTitleDescription( $this->getContext(), $row->namespace, $row->title ) );
index 088b060..4f691cb 100644 (file)
@@ -94,8 +94,8 @@ class AncientPagesPage extends QueryPage {
                $linkRenderer = $this->getLinkRenderer();
                $link = $linkRenderer->makeKnownLink(
                        $title,
-                       MediaWikiServices::getInstance()->getContentLanguage()->
-                               convert( $title->getPrefixedText() )
+                       new HtmlArmor( MediaWikiServices::getInstance()->getContentLanguage()->
+                               convert( htmlspecialchars( $title->getPrefixedText() ) ) )
                );
 
                return $this->getLanguage()->specialList( $link, htmlspecialchars( $d ) );
index 4a57c95..84454e2 100644 (file)
@@ -84,8 +84,8 @@ class FewestrevisionsPage extends QueryPage {
                }
                $linkRenderer = $this->getLinkRenderer();
                $text = MediaWikiServices::getInstance()->getContentLanguage()->
-                       convert( $nt->getPrefixedText() );
-               $plink = $linkRenderer->makeLink( $nt, $text );
+                       convert( htmlspecialchars( $nt->getPrefixedText() ) );
+               $plink = $linkRenderer->makeLink( $nt, new HtmlArmor( $text ) );
 
                $nl = $this->msg( 'nrevisions' )->numParams( $result->value )->text();
                $redirect = isset( $result->redirect ) && $result->redirect ?
index 3115adc..98f6072 100644 (file)
@@ -209,10 +209,12 @@ class FileDuplicateSearchPage extends QueryPage {
        function formatResult( $skin, $result ) {
                $linkRenderer = $this->getLinkRenderer();
                $nt = $result->getTitle();
-               $text = MediaWikiServices::getInstance()->getContentLanguage()->convert( $nt->getText() );
+               $text = MediaWikiServices::getInstance()->getContentLanguage()->convert(
+                       htmlspecialchars( $nt->getText() )
+               );
                $plink = $linkRenderer->makeLink(
                        $nt,
-                       $text
+                       new HtmlArmor( $text )
                );
 
                $userText = $result->getUser( 'text' );
index 18c163e..2599b16 100644 (file)
@@ -186,10 +186,11 @@ class MIMEsearchPage extends QueryPage {
        function formatResult( $skin, $result ) {
                $linkRenderer = $this->getLinkRenderer();
                $nt = Title::makeTitle( $result->namespace, $result->title );
-               $text = MediaWikiServices::getInstance()->getContentLanguage()->convert( $nt->getText() );
+               $text = MediaWikiServices::getInstance()->getContentLanguage()
+                       ->convert( htmlspecialchars( $nt->getText() ) );
                $plink = $linkRenderer->makeLink(
                        Title::newFromText( $nt->getPrefixedText() ),
-                       $text
+                       new HtmlArmor( $text )
                );
 
                $download = Linker::makeMediaLinkObj( $nt, $this->msg( 'download' )->escaped() );
index b80e518..52300f9 100644 (file)
@@ -84,8 +84,9 @@ class MostlinkedCategoriesPage extends QueryPage {
                        );
                }
 
-               $text = MediaWikiServices::getInstance()->getContentLanguage()->convert( $nt->getText() );
-               $plink = $this->getLinkRenderer()->makeLink( $nt, $text );
+               $text = MediaWikiServices::getInstance()->getContentLanguage()
+                       ->convert( new HtmlArmor( $nt->getText() ) );
+               $plink = $this->getLinkRenderer()->makeLink( $nt, new HtmlArmor( $text ) );
                $nlinks = $this->msg( 'nmembers' )->numParams( $result->value )->escaped();
 
                return $this->getLanguage()->specialList( $plink, $nlinks );
index 86dcb72..d904ad1 100644 (file)
@@ -568,9 +568,9 @@ class SpecialSearch extends SpecialPage {
                                'a',
                                [
                                        'href' => $this->getPageTitle()->getLocalURL( $params ),
-                                       'title' => $this->msg( 'search-filter-title-prefix-reset' ),
+                                       'title' => $this->msg( 'search-filter-title-prefix-reset' )->text(),
                                ],
-                               $this->msg( 'search-filter-title-prefix-reset' )
+                               $this->msg( 'search-filter-title-prefix-reset' )->text()
                        );
                        $subtitle .= ')';
                        $out->setSubtitle( $subtitle );
index a3a9bc6..2cd74b7 100644 (file)
@@ -117,11 +117,11 @@ class UnwatchedpagesPage extends QueryPage {
                }
 
                $text = MediaWikiServices::getInstance()->getContentLanguage()->
-                       convert( $nt->getPrefixedText() );
+                       convert( htmlspecialchars( $nt->getPrefixedText() ) );
 
                $linkRenderer = $this->getLinkRenderer();
 
-               $plink = $linkRenderer->makeKnownLink( $nt, $text );
+               $plink = $linkRenderer->makeKnownLink( $nt, new HtmlArmor( $text ) );
                $wlink = $linkRenderer->makeKnownLink(
                        $nt,
                        $this->msg( 'watch' )->text(),
index 2accef6..5c62298 100644 (file)
@@ -91,7 +91,8 @@ class WantedCategoriesPage extends WantedQueryPage {
         */
        function formatResult( $skin, $result ) {
                $nt = Title::makeTitle( $result->namespace, $result->title );
-               $text = MediaWikiServices::getInstance()->getContentLanguage()->convert( $nt->getText() );
+               $text = new HtmlArmor( MediaWikiServices::getInstance()->getContentLanguage()
+                       ->convert( htmlspecialchars( $nt->getText() ) ) );
 
                if ( !$this->isCached() ) {
                        // We can assume the freshest data