From 1c5fee635dcb597c40b70dc7b54216da46961fa8 Mon Sep 17 00:00:00 2001 From: Ilya Matyukhin Date: Fri, 15 Jan 2021 15:46:58 -0800 Subject: [PATCH] Fix NullPointerException in getAuthenticatorId when ID is missing Bug: 177640218 Test: atest Fingerprint21Test Test: atest Face10Test Change-Id: Idcb9fd1612c66600b9ef97ae31ff16c6a3f29222 --- .../server/biometrics/sensors/face/hidl/Face10.java | 2 +- .../sensors/fingerprint/hidl/Fingerprint21.java | 2 +- .../server/biometrics/sensors/face/hidl/Face10Test.java | 8 ++++++++ .../sensors/fingerprint/hidl/Fingerprint21Test.java | 8 ++++++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java b/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java index 10b12cb22e85d..4b30e7e720cbb 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/hidl/Face10.java @@ -482,7 +482,7 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider { @Override public long getAuthenticatorId(int sensorId, int userId) { - return mAuthenticatorIds.get(userId); + return mAuthenticatorIds.getOrDefault(userId, 0L); } @Override diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java index 7989e6e43d7e8..e450c47c98328 100644 --- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java +++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java @@ -681,7 +681,7 @@ public class Fingerprint21 implements IHwBinder.DeathRecipient, ServiceProvider @Override public long getAuthenticatorId(int sensorId, int userId) { - return mAuthenticatorIds.get(userId); + return mAuthenticatorIds.getOrDefault(userId, 0L); } @Override diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/Face10Test.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/Face10Test.java index 99aab5c7a6af8..392535e8eea1a 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/Face10Test.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/Face10Test.java @@ -16,6 +16,8 @@ package com.android.server.biometrics.sensors.face.hidl; +import static junit.framework.Assert.assertEquals; + import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -75,6 +77,12 @@ public class Face10Test { mBinder = new Binder(); } + @Test + public void getAuthenticatorId_doesNotCrashWhenIdNotFound() { + assertEquals(0, mFace10.getAuthenticatorId(0 /* sensorId */, 111 /* userId */)); + waitForIdle(); + } + @Test public void scheduleRevokeChallenge_doesNotCrash() { mFace10.scheduleRevokeChallenge(0 /* sensorId */, 0 /* userId */, mBinder, TAG, diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21Test.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21Test.java index b2aeb33039f5f..61cc8e6e8ea30 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21Test.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21Test.java @@ -16,6 +16,8 @@ package com.android.server.biometrics.sensors.fingerprint.hidl; +import static junit.framework.Assert.assertEquals; + import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -84,6 +86,12 @@ public class Fingerprint21Test { mHalResultController); } + @Test + public void getAuthenticatorId_doesNotCrashWhenIdNotFound() { + assertEquals(0, mFingerprint21.getAuthenticatorId(0 /* sensorId */, 111 /* userId */)); + waitForIdle(); + } + @Test public void halServiceDied_resetsScheduler() { // It's difficult to test the linkToDeath --> serviceDied path, so let's just invoke