From eb3e2b3b109d1c0279776fd4844090d06405f03b Mon Sep 17 00:00:00 2001 From: Jonathan Scott Date: Tue, 2 Feb 2021 14:10:18 +0000 Subject: [PATCH] Throw IllegalArgumentException when calling LockPatternUtils#getCredentialTypeForUser with invalid ID. Currently, using e.g. USER_CURRENT results in returning that the user requires no credentials - which can lead to un-noticed bugs such as b/176801033 Test: atest com.android.internal.widget.LockPatternUtilsTest Change-Id: I09be7f8f32e67ad039d9cd1d1710ef34ec198773 --- .../android/internal/widget/LockPatternUtils.java | 4 ++++ .../internal/widget/LockPatternUtilsTest.java | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index a161f18b2aab0..a7951b8d5a011 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -1103,6 +1103,10 @@ public class LockPatternUtils { * {@link #CREDENTIAL_TYPE_PASSWORD} */ public @CredentialType int getCredentialTypeForUser(int userHandle) { + if (userHandle < 0) { + throw new IllegalArgumentException("Invalid userHandle: " + userHandle); + } + try { return getLockSettings().getCredentialType(userHandle); } catch (RemoteException re) { diff --git a/core/tests/coretests/src/com/android/internal/widget/LockPatternUtilsTest.java b/core/tests/coretests/src/com/android/internal/widget/LockPatternUtilsTest.java index 6167c4b80ceea..d3ce0d88c56d0 100644 --- a/core/tests/coretests/src/com/android/internal/widget/LockPatternUtilsTest.java +++ b/core/tests/coretests/src/com/android/internal/widget/LockPatternUtilsTest.java @@ -18,10 +18,13 @@ package com.android.internal.widget; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; +import static org.testng.Assert.assertThrows; +import android.content.Context; import android.os.UserHandle; import androidx.test.filters.SmallTest; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import org.junit.Test; @@ -31,6 +34,9 @@ import org.junit.runner.RunWith; @SmallTest public class LockPatternUtilsTest { + private static final int INVALID_USER_ID = -1; + private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext(); + @Test public void testUserFrp_isNotRegularUser() throws Exception { assertTrue(LockPatternUtils.USER_FRP < 0); @@ -43,4 +49,10 @@ public class LockPatternUtilsTest { assertNotEquals(UserHandle.USER_CURRENT, LockPatternUtils.USER_FRP); assertNotEquals(UserHandle.USER_CURRENT_OR_SELF, LockPatternUtils.USER_FRP); } + + @Test + public void getCredentialTypeForUser_invalidUserId_throwsIllegalArgumentException() { + assertThrows(IllegalArgumentException.class, + () -> new LockPatternUtils(mContext).getCredentialTypeForUser(INVALID_USER_ID)); + } }