From 5d26b8c03a1e11076e41699fd54259ef5ff4a1e0 Mon Sep 17 00:00:00 2001 From: Annie Meng Date: Thu, 17 May 2018 16:00:16 +0100 Subject: [PATCH] Fix NPE in ComponentNameValidator In general, we should consider null component names as invalid settings, meaning that we don't restore. b/79925290 to allow restoring null component names for specific settings where null has semantic meaning. Bug: 79910479 Test: 1) atest SettingsValidatorsTest 2) Manual: - In Settings UI, select "None" for autofill service and accessibility shortcut target - "adb backup -keyvalue -f nullsettings.ab com.android.providers.settings" - "adb restore nullsettings.ab" and verify no crashes Change-Id: Iffecbe7d26a93a816e7be42f564ba471f9681876 --- core/java/android/provider/SettingsValidators.java | 2 +- .../src/android/provider/SettingsValidatorsTest.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/java/android/provider/SettingsValidators.java b/core/java/android/provider/SettingsValidators.java index 5885b6b50abde..c878bba4edfe6 100644 --- a/core/java/android/provider/SettingsValidators.java +++ b/core/java/android/provider/SettingsValidators.java @@ -79,7 +79,7 @@ public class SettingsValidators { public static final Validator COMPONENT_NAME_VALIDATOR = new Validator() { @Override public boolean validate(String value) { - return ComponentName.unflattenFromString(value) != null; + return value != null && ComponentName.unflattenFromString(value) != null; } }; diff --git a/core/tests/coretests/src/android/provider/SettingsValidatorsTest.java b/core/tests/coretests/src/android/provider/SettingsValidatorsTest.java index e7507667b17f5..c4d5b0c0358da 100644 --- a/core/tests/coretests/src/android/provider/SettingsValidatorsTest.java +++ b/core/tests/coretests/src/android/provider/SettingsValidatorsTest.java @@ -16,9 +16,9 @@ package android.provider; -import static org.junit.Assert.fail; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import android.platform.test.annotations.Presubmit; import android.provider.SettingsValidators.Validator; @@ -62,6 +62,11 @@ public class SettingsValidatorsTest { assertFalse(SettingsValidators.COMPONENT_NAME_VALIDATOR.validate("rectangle")); } + @Test + public void testComponentNameValidator_onNullValue_doesNotThrow() { + assertFalse(SettingsValidators.COMPONENT_NAME_VALIDATOR.validate(null)); + } + @Test public void testLocaleValidator() { assertTrue(SettingsValidators.LOCALE_VALIDATOR.validate("en_US"));