Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3fda07c authored by Diya Bera's avatar Diya Bera
Browse files

Add null checker for hardware auth token

Test: atest FaceManagerTest, atest FingerprintManagerTest
Bug: 277667274
Change-Id: I14ddf852c24c305eba6b3ce70f6ac5ff332d3c45
parent af0d1b08
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -342,6 +342,13 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
            return;
        }

        if (hardwareAuthToken == null) {
            callback.onEnrollmentError(FACE_ERROR_UNABLE_TO_PROCESS,
                    getErrorString(mContext, FACE_ERROR_UNABLE_TO_PROCESS,
                    0 /* vendorCode */));
            return;
        }

        if (getEnrolledFaces(userId).size()
                >= mContext.getResources().getInteger(R.integer.config_faceMaxTemplatesPerUser)) {
            callback.onEnrollmentError(FACE_ERROR_HW_UNAVAILABLE,
+7 −0
Original line number Diff line number Diff line
@@ -712,6 +712,13 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
            return;
        }

        if (hardwareAuthToken == null) {
            callback.onEnrollmentError(FINGERPRINT_ERROR_UNABLE_TO_PROCESS,
                    getErrorString(mContext, FINGERPRINT_ERROR_UNABLE_TO_PROCESS,
                            0 /* vendorCode */));
            return;
        }

        if (mService != null) {
            try {
                mEnrollmentCallback = callback;
+13 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.hardware.face;

import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_HW_UNAVAILABLE;
import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_UNABLE_TO_PROCESS;

import static com.google.common.truth.Truth.assertThat;

@@ -178,6 +179,18 @@ public class FaceManagerTest {
        verify(mEnrollmentCallback).onEnrollmentError(eq(FACE_ERROR_HW_UNAVAILABLE), anyString());
    }

    @Test
    public void enrollment_errorWhenHardwareAuthTokenIsNull() throws RemoteException {
        initializeProperties();
        mFaceManager.enroll(USER_ID, null,
                new CancellationSignal(), mEnrollmentCallback, null /* disabledFeatures */);

        verify(mEnrollmentCallback).onEnrollmentError(eq(FACE_ERROR_UNABLE_TO_PROCESS),
                anyString());
        verify(mService, never()).enroll(eq(USER_ID), any(), any(),
                any(), anyString(), any(), any(), anyBoolean());
    }

    private void initializeProperties() throws RemoteException {
        verify(mService).addAuthenticatorsRegisteredCallback(mCaptor.capture());

+17 −0
Original line number Diff line number Diff line
@@ -17,12 +17,14 @@
package android.hardware.fingerprint;

import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE;
import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_UNABLE_TO_PROCESS;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -70,6 +72,8 @@ public class FingerprintManagerTest {
    private IFingerprintService mService;
    @Mock
    private FingerprintManager.AuthenticationCallback mAuthCallback;
    @Mock
    private FingerprintManager.EnrollmentCallback mEnrollCallback;

    @Captor
    private ArgumentCaptor<IFingerprintAuthenticatorsRegisteredCallback> mCaptor;
@@ -149,4 +153,17 @@ public class FingerprintManagerTest {

        verify(mAuthCallback).onAuthenticationError(eq(FINGERPRINT_ERROR_HW_UNAVAILABLE), any());
    }

    @Test
    public void enrollment_errorWhenHardwareAuthTokenIsNull() throws RemoteException {
        verify(mService).addAuthenticatorsRegisteredCallback(mCaptor.capture());

        mCaptor.getValue().onAllAuthenticatorsRegistered(mProps);
        mFingerprintManager.enroll(null, new CancellationSignal(), USER_ID,
                mEnrollCallback, FingerprintManager.ENROLL_ENROLL);

        verify(mEnrollCallback).onEnrollmentError(eq(FINGERPRINT_ERROR_UNABLE_TO_PROCESS),
                anyString());
        verify(mService, never()).enroll(any(), any(), anyInt(), any(), anyString(), anyInt());
    }
}