From 4f2fe642839636d0dc8c5699b4e44796ea3890ab Mon Sep 17 00:00:00 2001 From: umherirrender Date: Tue, 2 Feb 2016 20:56:25 +0100 Subject: [PATCH] Set context on RedirectSpecialPage in MediaWiki.php Special page instance from SpecialPageFactory::getPage needs a context set, to avoid using RequestContext::getMain in SpecialPage::getContext Change-Id: I6e0828c6c9668c4ef10a729533190a5225b8782f --- includes/MediaWiki.php | 48 ++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/includes/MediaWiki.php b/includes/MediaWiki.php index 7846ca428c..4939c4d7ff 100644 --- a/includes/MediaWiki.php +++ b/includes/MediaWiki.php @@ -247,29 +247,31 @@ class MediaWiki { // Prevent information leak via Special:MyPage et al (T109724) if ( $title->isSpecialPage() ) { $specialPage = SpecialPageFactory::getPage( $title->getDBKey() ); - if ( $specialPage instanceof RedirectSpecialPage - && $this->config->get( 'HideIdentifiableRedirects' ) - && $specialPage->personallyIdentifiableTarget() - ) { - list( , $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBKey() ); - $target = $specialPage->getRedirect( $subpage ); - // target can also be true. We let that case fall through to normal processing. - if ( $target instanceof Title ) { - $query = $specialPage->getRedirectQuery() ?: array(); - $request = new DerivativeRequest( $this->context->getRequest(), $query ); - $request->setRequestURL( $this->context->getRequest()->getRequestURL() ); - $this->context->setRequest( $request ); - // Do not varnish cache these. May vary even for anons - $this->context->getOutput()->lowerCdnMaxage( 0 ); - $this->context->setTitle( $target ); - $wgTitle = $target; - // Reset action type cache. (Special pages have only view) - $this->action = null; - $title = $target; - $output->addJsConfigVars( array( - 'wgInternalRedirectTargetUrl' => $target->getFullURL( $query ), - ) ); - $output->addModules( 'mediawiki.action.view.redirect' ); + if ( $specialPage instanceof RedirectSpecialPage ) { + $specialPage->setContext( $this->context ); + if ( $this->config->get( 'HideIdentifiableRedirects' ) + && $specialPage->personallyIdentifiableTarget() + ) { + list( , $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBKey() ); + $target = $specialPage->getRedirect( $subpage ); + // target can also be true. We let that case fall through to normal processing. + if ( $target instanceof Title ) { + $query = $specialPage->getRedirectQuery() ?: array(); + $request = new DerivativeRequest( $this->context->getRequest(), $query ); + $request->setRequestURL( $this->context->getRequest()->getRequestURL() ); + $this->context->setRequest( $request ); + // Do not varnish cache these. May vary even for anons + $this->context->getOutput()->lowerCdnMaxage( 0 ); + $this->context->setTitle( $target ); + $wgTitle = $target; + // Reset action type cache. (Special pages have only view) + $this->action = null; + $title = $target; + $output->addJsConfigVars( array( + 'wgInternalRedirectTargetUrl' => $target->getFullURL( $query ), + ) ); + $output->addModules( 'mediawiki.action.view.redirect' ); + } } } } -- 2.20.1