Merge "Validate that $wgVariantArticlePath is absolute, too"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 18 Jan 2016 00:56:22 +0000 (00:56 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 18 Jan 2016 00:56:22 +0000 (00:56 +0000)
1  2 
includes/Setup.php

diff --combined includes/Setup.php
@@@ -497,25 -497,10 +497,25 @@@ if ( $wgMaximalPasswordLength !== fals
        $wgPasswordPolicy['policies']['default']['MaximalPasswordLength'] = $wgMaximalPasswordLength;
  }
  
 -// Backwards compatibility with deprecated alias
 -// Must be before call to wfSetupSession()
 -if ( $wgSessionsInMemcached ) {
 -      $wgSessionsInObjectCache = true;
 +// Backwards compatibility warning
 +if ( !$wgSessionsInObjectCache && !$wgSessionsInMemcached ) {
 +      wfDeprecated( '$wgSessionsInObjectCache = false', '1.27' );
 +      if ( $wgSessionHandler ) {
 +              wfDeprecated( '$wgSessionsHandler', '1.27' );
 +      }
 +      $cacheType = get_class( ObjectCache::getInstance( $wgSessionCacheType ) );
 +      wfDebugLog(
 +              "Session data will be stored in \"$cacheType\" cache with " .
 +                      "expiry $wgObjectCacheSessionExpiry seconds"
 +      );
 +}
 +$wgSessionsInObjectCache = true;
 +
 +if ( $wgPHPSessionHandling !== 'enable' &&
 +      $wgPHPSessionHandling !== 'warn' &&
 +      $wgPHPSessionHandling !== 'disable'
 +) {
 +      $wgPHPSessionHandling = 'warn';
  }
  
  Profiler::instance()->scopedProfileOut( $ps_default );
@@@ -538,13 -523,15 +538,15 @@@ require_once "$IP/includes/compat/norma
  $ps_validation = Profiler::instance()->scopedProfileIn( $fname . '-validation' );
  
  // T48998: Bail out early if $wgArticlePath is non-absolute
- if ( !preg_match( '/^(https?:\/\/|\/)/', $wgArticlePath ) ) {
-       throw new FatalError(
-               'If you use a relative URL for $wgArticlePath, it must start ' .
-               'with a slash (<code>/</code>).<br><br>See ' .
-               '<a href="https://www.mediawiki.org/wiki/Manual:$wgArticlePath">' .
-               'https://www.mediawiki.org/wiki/Manual:$wgArticlePath</a>.'
-       );
+ foreach ( array( 'wgArticlePath', 'wgVariantArticlePath' ) as $varName ) {
+       if ( $$varName && !preg_match( '/^(https?:\/\/|\/)/', $$varName ) ) {
+               throw new FatalError(
+                       "If you use a relative URL for \$$varName, it must start " .
+                       'with a slash (<code>/</code>).<br><br>See ' .
+                       "<a href=\"https://www.mediawiki.org/wiki/Manual:\$$varName\">" .
+                       "https://www.mediawiki.org/wiki/Manual:\$$varName</a>."
+               );
+       }
  }
  
  Profiler::instance()->scopedProfileOut( $ps_validation );
@@@ -670,6 -657,20 +672,6 @@@ Profiler::instance()->scopedProfileOut
  // Most of the config is out, some might want to run hooks here.
  Hooks::run( 'SetupAfterCache' );
  
 -$ps_session = Profiler::instance()->scopedProfileIn( $fname . '-session' );
 -
 -if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
 -      // If session.auto_start is there, we can't touch session name
 -      if ( !wfIniGetBool( 'session.auto_start' ) ) {
 -              session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' );
 -      }
 -
 -      if ( $wgRequest->checkSessionCookie() || isset( $_COOKIE[$wgCookiePrefix . 'Token'] ) ) {
 -              wfSetupSession();
 -      }
 -}
 -
 -Profiler::instance()->scopedProfileOut( $ps_session );
  $ps_globals = Profiler::instance()->scopedProfileIn( $fname . '-globals' );
  
  /**
@@@ -682,56 -683,6 +684,56 @@@ $wgContLang->initContLang()
  // Now that variant lists may be available...
  $wgRequest->interpolateTitle();
  
 +if ( !is_object( $wgAuth ) ) {
 +      $wgAuth = new AuthPlugin;
 +      Hooks::run( 'AuthPluginSetup', array( &$wgAuth ) );
 +}
 +
 +// Set up the session
 +$ps_session = Profiler::instance()->scopedProfileIn( $fname . '-session' );
 +if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
 +      // If session.auto_start is there, we can't touch session name
 +      if ( $wgPHPSessionHandling !== 'disable' && !wfIniGetBool( 'session.auto_start' ) ) {
 +              session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' );
 +      }
 +
 +      // Create the SessionManager singleton and set up our session handler
 +      MediaWiki\Session\PHPSessionHandler::install(
 +              MediaWiki\Session\SessionManager::singleton()
 +      );
 +
 +      // Initialize the session
 +      try {
 +              $session = MediaWiki\Session\SessionManager::getGlobalSession();
 +      } catch ( OverflowException $ex ) {
 +              if ( isset( $ex->sessionInfos ) && count( $ex->sessionInfos ) >= 2 ) {
 +                      // The exception is because the request had multiple possible
 +                      // sessions tied for top priority. Report this to the user.
 +                      $list = array();
 +                      foreach ( $ex->sessionInfos as $info ) {
 +                              $list[] = $info->getProvider()->describe( $wgContLang );
 +                      }
 +                      $list = $wgContLang->listToText( $list );
 +                      throw new HttpError( 400,
 +                              Message::newFromKey( 'sessionmanager-tie', $list )->inLanguage( $wgContLang )->plain()
 +                      );
 +              }
 +
 +              // Not the one we want, rethrow
 +              throw $ex;
 +      }
 +
 +      $session->renew();
 +      if ( MediaWiki\Session\PHPSessionHandler::isEnabled() &&
 +              ( $session->isPersistent() || $session->shouldRememberUser() )
 +      ) {
 +              // Start the PHP-session for backwards compatibility
 +              session_id( $session->getId() );
 +              MediaWiki\quietCall( 'session_start' );
 +      }
 +}
 +Profiler::instance()->scopedProfileOut( $ps_session );
 +
  /**
   * @var User $wgUser
   */
@@@ -752,6 -703,11 +754,6 @@@ $wgOut = RequestContext::getMain()->get
   */
  $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParserConf ) );
  
 -if ( !is_object( $wgAuth ) ) {
 -      $wgAuth = new AuthPlugin;
 -      Hooks::run( 'AuthPluginSetup', array( &$wgAuth ) );
 -}
 -
  /**
   * @var Title $wgTitle
   */
@@@ -783,16 -739,6 +785,16 @@@ foreach ( $wgExtensionFunctions as $fun
        Profiler::instance()->scopedProfileOut( $ps_ext_func );
  }
  
 +// If the session user has a 0 id but a valid name, that means we need to
 +// autocreate it.
 +$sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
 +if ( $sessionUser->getId() === 0 && User::isValidUserName( $sessionUser->getName() ) ) {
 +      $ps_autocreate = Profiler::instance()->scopedProfileIn( $fname . '-autocreate' );
 +      MediaWiki\Session\SessionManager::autoCreateUser( $sessionUser );
 +      Profiler::instance()->scopedProfileOut( $ps_autocreate );
 +}
 +unset( $sessionUser );
 +
  wfDebug( "Fully initialised\n" );
  $wgFullyInitialised = true;