From 7e24705bcd499054cd4456949b20203a53e53483 Mon Sep 17 00:00:00 2001 From: Umherirrender Date: Mon, 1 Nov 2021 20:41:40 +0100 Subject: [PATCH] Exclude null values for flag UserOptionsManager::EXCLUDE_DEFAULTS isset returns false for null and the null values are not compared, that treats them as non-default, even the default is also null. Bug: T291748 Follow-Up: I6e61c11d8aed27b4b559e74849e0056e5eef3638 Change-Id: I0a0932b403098967c261eee3dc0e7d5da3c4fffb --- includes/user/UserOptionsManager.php | 2 +- tests/phpunit/includes/user/UserOptionsManagerTest.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/includes/user/UserOptionsManager.php b/includes/user/UserOptionsManager.php index 55b21231f98..6c640d6f5fa 100644 --- a/includes/user/UserOptionsManager.php +++ b/includes/user/UserOptionsManager.php @@ -176,7 +176,7 @@ class UserOptionsManager extends UserOptionsLookup { if ( $flags & self::EXCLUDE_DEFAULTS ) { $defaultOptions = $this->defaultOptionsLookup->getDefaultOptions(); foreach ( $options as $option => $value ) { - if ( isset( $defaultOptions[$option] ) + if ( array_key_exists( $option, $defaultOptions ) && $this->isValueEqual( $value, $defaultOptions[$option] ) ) { unset( $options[$option] ); diff --git a/tests/phpunit/includes/user/UserOptionsManagerTest.php b/tests/phpunit/includes/user/UserOptionsManagerTest.php index 9754abc7ea7..211dc7204fa 100644 --- a/tests/phpunit/includes/user/UserOptionsManagerTest.php +++ b/tests/phpunit/includes/user/UserOptionsManagerTest.php @@ -88,7 +88,6 @@ class UserOptionsManagerTest extends UserOptionsLookupTest { $expected = [ // Note that the old, relaxed array_diff-approach considered null equal to false and "" 'null_vs_false' => false, - 'null_vs_string' => '', 'language' => 'en', 'variant' => 'en', 'new_option' => 'new_value',