diff options
| author | 2023-06-29 18:26:02 +0000 | |
|---|---|---|
| committer | 2023-06-29 18:26:02 +0000 | |
| commit | 97bf3c581e7ffa3b08adf6152f99eebb98589e1a (patch) | |
| tree | 3ae06996ece4678fd748f5aafd750d28876b5a6d | |
| parent | bf4063b7b6a806585bfcfee955fc5232d84a3004 (diff) | |
| parent | 6cbae2d6d0adcddafe2d0c0dd50aec53a6a12cfe (diff) | |
Merge "Prevent crash in AccountManager after profile removal." am: 6cbae2d6d0
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2640545
Change-Id: I1c1276a129c429705f14d05b82f66d8972065058
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | services/core/java/com/android/server/accounts/AccountManagerService.java | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index e1b3a30c546d..2a9dc52aee11 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -67,6 +67,7 @@ import android.content.pm.Signature; import android.content.pm.SigningDetails.CertCapabilities; import android.content.pm.UserInfo; import android.database.Cursor; +import android.database.sqlite.SQLiteCantOpenDatabaseException; import android.database.sqlite.SQLiteFullException; import android.database.sqlite.SQLiteStatement; import android.os.Binder; @@ -1383,7 +1384,13 @@ public class AccountManagerService private void purgeOldGrants(UserAccounts accounts) { synchronized (accounts.dbLock) { synchronized (accounts.cacheLock) { - List<Integer> uids = accounts.accountsDb.findAllUidGrants(); + List<Integer> uids; + try { + uids = accounts.accountsDb.findAllUidGrants(); + } catch (SQLiteCantOpenDatabaseException e) { + Log.w(TAG, "Could not delete grants for user = " + accounts.userId); + return; + } for (int uid : uids) { final boolean packageExists = mPackageManager.getPackagesForUid(uid) != null; if (packageExists) { @@ -1409,7 +1416,13 @@ public class AccountManagerService mPackageManager.getPackageUidAsUser(packageName, accounts.userId); } catch (NameNotFoundException e) { // package does not exist - remove visibility values - accounts.accountsDb.deleteAccountVisibilityForPackage(packageName); + try { + accounts.accountsDb.deleteAccountVisibilityForPackage(packageName); + } catch (SQLiteCantOpenDatabaseException sqlException) { + Log.w(TAG, "Could not delete account visibility for user = " + + accounts.userId, sqlException); + continue; + } synchronized (accounts.dbLock) { synchronized (accounts.cacheLock) { for (Account account : accounts.visibilityCache.keySet()) { |