From: Derick Alangi Date: Fri, 25 Jan 2019 21:50:34 +0000 (+0100) Subject: specialpage: Fix login crash caused by unknown language via ?uselang X-Git-Tag: 1.34.0-rc.0~2944^2 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=34f78a69ef058c19ecdac7290a174624ef8212ee specialpage: Fix login crash caused by unknown language via ?uselang Per Krinkle's comments here: T198054#4598447, it's exactly what is happening. @Fomafix suggests we handle the exception that is been thrown by Language::factory() when there is an invalid language code provided. The attempt is to fix this in the central way of ever request whether POST or GET. We're working within a particular context, and within this request context, we can create a language user's language object then generate a language object. If uselang parameter is provided an invalid language code, getLanguage in this request context will default to $wgLanguageCode then use this code to create the user's language object. In addition, getLanguage() invalidates cached user interface language. Bug: T198054 Change-Id: I825fdfa882a4243ffc63c9de0d7f482e2cfb9862 --- diff --git a/includes/context/RequestContext.php b/includes/context/RequestContext.php index 16c304c015..2cbe67c525 100644 --- a/includes/context/RequestContext.php +++ b/includes/context/RequestContext.php @@ -257,6 +257,8 @@ class RequestContext implements IContextSource, MutableContext { */ public function setUser( User $user ) { $this->user = $user; + // Invalidate cached user interface language + $this->lang = null; } /** diff --git a/includes/specialpage/LoginSignupSpecialPage.php b/includes/specialpage/LoginSignupSpecialPage.php index 48dd405a13..743a5a5df0 100644 --- a/includes/specialpage/LoginSignupSpecialPage.php +++ b/includes/specialpage/LoginSignupSpecialPage.php @@ -491,10 +491,7 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage { $wgUser = $user; $context->setUser( $user ); - $code = $this->getRequest()->getVal( 'uselang', $user->getOption( 'language' ) ); - $userLang = Language::factory( $code ); - $wgLang = $userLang; - $context->setLanguage( $userLang ); + $wgLang = $context->getLanguage(); } /**