From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Thu, 27 Jul 2023 21:45:05 +0000 Subject: [PATCH] RESTRICT AUTOMERGE: Catch exceptions from setLockCredential() When LockPatternUtils#setLockCredential() fails, it can either return false or throw an exception. Catch the exception and treat it the same way as a false return value, to prevent crashing com.android.settings. Bug: 253043065 Test: Tried setting lockscreen credential while in secure FRP mode using smartlock setup activity launched by intent via adb. Verified that com.android.settings no longer crashes due to the exception from LockPatternUtils#setLockCredential(). (cherry picked from commit 05f1eff1c9c3f82797f1a0f92ff7665b9f463488) (moved change into ChooseLockPassword.java and ChooseLockPattern.java, which are merged into SaveAndFinishWorker.java on udc-qpr-dev and main) (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e0b5a793a19198370d479401101cea97c2f1d835) Merged-In: I48b9119c19fb6378b1f88d36433ee4f4c8501d76 Change-Id: I48b9119c19fb6378b1f88d36433ee4f4c8501d76 --- .../android/settings/password/ChooseLockPassword.java | 9 +++++++-- src/com/android/settings/password/ChooseLockPattern.java | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java index c4a3159e00..613388b21f 100644 --- a/src/com/android/settings/password/ChooseLockPassword.java +++ b/src/com/android/settings/password/ChooseLockPassword.java @@ -1048,8 +1048,13 @@ public class ChooseLockPassword extends SettingsActivity { @Override protected Pair saveAndVerifyInBackground() { - final boolean success = mUtils.setLockCredential( - mChosenPassword, mCurrentCredential, mUserId); + boolean success; + try { + success = mUtils.setLockCredential(mChosenPassword, mCurrentCredential, mUserId); + } catch (RuntimeException e) { + Log.e(TAG, "Failed to set lockscreen credential", e); + success = false; + } if (success) { unifyProfileCredentialIfRequested(); } diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java index e54568060a..964a268510 100644 --- a/src/com/android/settings/password/ChooseLockPattern.java +++ b/src/com/android/settings/password/ChooseLockPattern.java @@ -925,8 +925,13 @@ public class ChooseLockPattern extends SettingsActivity { protected Pair saveAndVerifyInBackground() { final int userId = mUserId; mUtils.setLockPatternSize(mPatternSize, userId); - final boolean success = mUtils.setLockCredential(mChosenPattern, mCurrentCredential, - userId); + boolean success; + try { + success = mUtils.setLockCredential(mChosenPattern, mCurrentCredential, userId); + } catch (RuntimeException e) { + Log.e(TAG, "Failed to set lockscreen credential", e); + success = false; + } if (success) { unifyProfileCredentialIfRequested(); }