diff --git a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java index 2c28af1cc6183..434c0d7f955ae 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java @@ -62,6 +62,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Objects; /** * Storage for the lock settings service. @@ -886,12 +887,15 @@ class LockSettingsStorage { if (!(obj instanceof CacheKey)) return false; CacheKey o = (CacheKey) obj; - return userId == o.userId && type == o.type && key.equals(o.key); + return userId == o.userId && type == o.type && Objects.equals(key, o.key); } @Override public int hashCode() { - return key.hashCode() ^ userId ^ type; + int hashCode = Objects.hashCode(key); + hashCode = 31 * hashCode + userId; + hashCode = 31 * hashCode + type; + return hashCode; } } } diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java index 03d5b17d7fa85..05208441e3f2c 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java @@ -265,6 +265,20 @@ public class LockSettingsStorageTests { assertEquals("Cached value didn't match stored value", storage, cached); } + @Test + public void testNullKey() { + mStorage.setString(null, "value", 0); + + // Verify that this doesn't throw an exception. + assertEquals("value", mStorage.readKeyValue(null, null, 0)); + + // The read that happens as part of prefetchUser shouldn't throw an exception either. + mStorage.clearCache(); + mStorage.prefetchUser(0); + + assertEquals("value", mStorage.readKeyValue(null, null, 0)); + } + @Test public void testRemoveUser() { mStorage.writeKeyValue("key", "value", 0);