registration: Don't override boolean false settings
authorKunal Mehta <legoktm@gmail.com>
Wed, 3 Jun 2015 15:03:20 +0000 (08:03 -0700)
committerKunal Mehta <legoktm@gmail.com>
Wed, 3 Jun 2015 15:03:20 +0000 (08:03 -0700)
Our optimization of !$GLOBALS[$key] was affecting settings where a true
setting was being disabled in LocalSettings.php. Now explicitly check it
is an array before overriding it.

Bug: T100767
Change-Id: Id5397e526d66559bfabe6065223b1181a8a9d31e

includes/registration/ExtensionRegistry.php
tests/phpunit/includes/registration/ExtensionRegistryTest.php

index e46c753..d767870 100644 (file)
@@ -163,7 +163,7 @@ class ExtensionRegistry {
 
        protected function exportExtractedData( array $info ) {
                foreach ( $info['globals'] as $key => $val ) {
-                       if ( !isset( $GLOBALS[$key] ) || !$GLOBALS[$key] ) {
+                       if ( !isset( $GLOBALS[$key] ) || ( is_array( $GLOBALS[$key] ) && !$GLOBALS[$key] ) ) {
                                $GLOBALS[$key] = $val;
                        } elseif ( $key === 'wgHooks' || $key === 'wgExtensionCredits' ) {
                                // Special case $wgHooks and $wgExtensionCredits, which require a recursive merge.
index 8674343..515ce11 100644 (file)
@@ -191,7 +191,19 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                                )
                                        ),
                                ),
-                       )
+                       ),
+                       array(
+                               'False local setting should not be overridden (T100767)',
+                               array(
+                                       'mwtestT100767' => false,
+                               ),
+                               array(
+                                       'mwtestT100767' => true,
+                               ),
+                               array(
+                                       'mwtestT100767' => false,
+                               ),
+                       ),
                );
        }
 }