ExtensionRegistry: Properly detect if a global is already set
authorMarius Hoch <hoo@online.de>
Tue, 23 Jan 2018 18:44:28 +0000 (10:44 -0800)
committerMarius Hoch <hoo@online.de>
Tue, 23 Jan 2018 18:44:28 +0000 (10:44 -0800)
$foo = null; isset( $foo ); will yield false.

Sometimes we want to explicitly set a config to null, but ExtensionRegistry
is then overriding this variable with the default value.

This is no consistent with the old workflow:
require_once the extension and then override the setting with null.

Bug: T128661
Change-Id: I0654c9369a596e84591fcaa9643703e6b4ccf57e

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

index 6308461..ae1ab58 100644 (file)
@@ -291,7 +291,7 @@ class ExtensionRegistry {
 
                        // Optimistic: If the global is not set, or is an empty array, replace it entirely.
                        // Will be O(1) performance.
-                       if ( !isset( $GLOBALS[$key] ) || ( is_array( $GLOBALS[$key] ) && !$GLOBALS[$key] ) ) {
+                       if ( !array_key_exists( $key, $GLOBALS ) || ( is_array( $GLOBALS[$key] ) && !$GLOBALS[$key] ) ) {
                                $GLOBALS[$key] = $val;
                                continue;
                        }
index 9b57e1c..5916b45 100644 (file)
@@ -287,6 +287,18 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                        ],
                                ],
                        ],
+                       [
+                               'global is null before',
+                               [
+                                       'NullGlobal' => null,
+                               ],
+                               [
+                                       'NullGlobal' => 'not-null'
+                               ],
+                               [
+                                       'NullGlobal' => null
+                               ],
+                       ],
                ];
        }
 }