From: Brad Jorsch Date: Wed, 22 Oct 2014 21:26:40 +0000 (-0400) Subject: API: Include ApiMain construction in api.php try-catch block X-Git-Tag: 1.31.0-rc.0~13510 X-Git-Url: http://git.cyclocoop.org/%27%20.%20url_absolue%28%24favicon%29%20.%20?a=commitdiff_plain;h=ae5cfdb1256a83b0ed43b8bed94794e3ff5471c5;p=lhc%2Fweb%2Fwiklou.git 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 --- 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();