From ae5cfdb1256a83b0ed43b8bed94794e3ff5471c5 Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Wed, 22 Oct 2014 17:26:40 -0400 Subject: [PATCH] API: Include ApiMain construction in api.php try-catch block If the User language is accessed from ApiMain::__construct on a request via OAuth and the authorization headers weren't valid, the UsageException was not being handled. Further, the code setting $wgLang in that constructor should be using the language just set on the local context, not the main request context. Bug: 72384 Change-Id: I90900dc4a8aea22c67c0c05b38128d5dbb044f07 --- api.php | 14 +++++++------- includes/api/ApiMain.php | 3 ++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/api.php b/api.php index 2a6a095de1..7974f15cb2 100644 --- a/api.php +++ b/api.php @@ -62,14 +62,14 @@ if ( !$wgEnableAPI ) { // In a perfect world this wouldn't be necessary $wgTitle = Title::makeTitle( NS_MAIN, 'API' ); -/* Construct an ApiMain with the arguments passed via the URL. What we get back - * is some form of an ApiMain, possibly even one that produces an error message, - * but we don't care here, as that is handled by the ctor. - */ -$processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI ); - -// Last chance hook before executing the API try { + /* Construct an ApiMain with the arguments passed via the URL. What we get back + * is some form of an ApiMain, possibly even one that produces an error message, + * but we don't care here, as that is handled by the ctor. + */ + $processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI ); + + // Last chance hook before executing the API wfRunHooks( 'ApiBeforeMain', array( &$processor ) ); if ( !$processor instanceof ApiMain ) { throw new MWException( 'ApiBeforMain hook set $processor to a non-ApiMain class' ); diff --git a/includes/api/ApiMain.php b/includes/api/ApiMain.php index c9e898cc8d..bf26eeec0c 100644 --- a/includes/api/ApiMain.php +++ b/includes/api/ApiMain.php @@ -197,7 +197,8 @@ class ApiMain extends ApiBase { $this->getContext()->setLanguage( $code ); if ( !$this->mInternalMode ) { global $wgLang; - $wgLang = RequestContext::getMain()->getLanguage(); + $wgLang = $this->getContext()->getLanguage(); + RequestContext::getMain()->setLanguage( $wgLang ); } $config = $this->getConfig(); -- 2.20.1