summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/locksettings/LockSettingsService.java3
-rw-r--r--services/core/java/com/android/server/locksettings/LockSettingsStorage.java8
-rw-r--r--services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java15
-rw-r--r--services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java14
4 files changed, 38 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java
index 121b7c87223b..31b8ef28f246 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsService.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java
@@ -1156,18 +1156,21 @@ public class LockSettingsService extends ILockSettings.Stub {
@Override
public void setBoolean(String key, boolean value, int userId) {
checkWritePermission();
+ Objects.requireNonNull(key);
mStorage.setBoolean(key, value, userId);
}
@Override
public void setLong(String key, long value, int userId) {
checkWritePermission();
+ Objects.requireNonNull(key);
mStorage.setLong(key, value, userId);
}
@Override
public void setString(String key, String value, int userId) {
checkWritePermission();
+ Objects.requireNonNull(key);
mStorage.setString(key, value, userId);
}
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java
index 2c28af1cc618..434c0d7f955a 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/LockSettingsServiceTests.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java
index 41e3a08be6c5..60a033fde427 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java
@@ -423,6 +423,21 @@ public class LockSettingsServiceTests extends BaseLockSettingsServiceTests {
checkPasswordHistoryLength(userId, 3);
}
+ @Test(expected=NullPointerException.class)
+ public void testSetBooleanRejectsNullKey() {
+ mService.setBoolean(null, false, 0);
+ }
+
+ @Test(expected=NullPointerException.class)
+ public void testSetLongRejectsNullKey() {
+ mService.setLong(null, 0, 0);
+ }
+
+ @Test(expected=NullPointerException.class)
+ public void testSetStringRejectsNullKey() {
+ mService.setString(null, "value", 0);
+ }
+
private void checkPasswordHistoryLength(int userId, int expectedLen) {
String history = mService.getString(LockPatternUtils.PASSWORD_HISTORY_KEY, "", userId);
String[] hashes = TextUtils.split(history, LockPatternUtils.PASSWORD_HISTORY_DELIMITER);
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 03d5b17d7fa8..05208441e3f2 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java
@@ -266,6 +266,20 @@ public class LockSettingsStorageTests {
}
@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);
mStorage.writeKeyValue("key", "value", 1);