diff options
author | Patrick Baumann <patb@google.com> | 2019-08-23 13:50:23 -0700 |
---|---|---|
committer | Sterling Huber <hubers@google.com> | 2020-01-07 22:56:56 +0000 |
commit | 6afabce549f5725988b9c03de932c34e9d22f10e (patch) | |
tree | 31f31afdf4104de07ad901931eeb3acbfc823357 | |
parent | 88c651eab144bf64acb1d99f11aabe983f23658c (diff) | |
download | base-6afabce549f5725988b9c03de932c34e9d22f10e.tar.gz |
Handles null outInfo in deleteSystemPackageLI
This change adds null checks before accessing outInfo in
deleteSystemPackageLI.
Bug: 142083996
Bug: 141413692
Test: manual; remove static dependency on eng build and reboot
Change-Id: If0fd48343e89cbb77ccd25826656194195d5b0cd
(cherry picked from commit 17471016508bb9c9ffb8c3946dda0b4897d722f1)
Merged-In: If0fd48343e89cbb77ccd25826656194195d5b0cd
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index ab6c956c6924..9edd0462055e 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -19283,7 +19283,8 @@ public class PackageManagerService extends IPackageManager.Stub * Tries to delete system package. */ private boolean deleteSystemPackageLIF(PackageParser.Package deletedPkg, - PackageSetting deletedPs, int[] allUserHandles, int flags, PackageRemovedInfo outInfo, + PackageSetting deletedPs, int[] allUserHandles, int flags, + @Nullable PackageRemovedInfo outInfo, boolean writeSettings) { if (deletedPs.parentPackageName != null) { Slog.w(TAG, "Attempt to delete child system package " + deletedPkg.packageName); @@ -19291,7 +19292,7 @@ public class PackageManagerService extends IPackageManager.Stub } final boolean applyUserRestrictions - = (allUserHandles != null) && (outInfo.origUsers != null); + = (allUserHandles != null) && outInfo != null && (outInfo.origUsers != null); final PackageSetting disabledPs; // Confirm if the system package has been updated // An updated system app can be deleted. This will also have to restore @@ -19321,19 +19322,21 @@ public class PackageManagerService extends IPackageManager.Stub } } - // Delete the updated package - outInfo.isRemovedPackageSystemUpdate = true; - if (outInfo.removedChildPackages != null) { - final int childCount = (deletedPs.childPackageNames != null) - ? deletedPs.childPackageNames.size() : 0; - for (int i = 0; i < childCount; i++) { - String childPackageName = deletedPs.childPackageNames.get(i); - if (disabledPs.childPackageNames != null && disabledPs.childPackageNames - .contains(childPackageName)) { - PackageRemovedInfo childInfo = outInfo.removedChildPackages.get( - childPackageName); - if (childInfo != null) { - childInfo.isRemovedPackageSystemUpdate = true; + if (outInfo != null) { + // Delete the updated package + outInfo.isRemovedPackageSystemUpdate = true; + if (outInfo.removedChildPackages != null) { + final int childCount = (deletedPs.childPackageNames != null) + ? deletedPs.childPackageNames.size() : 0; + for (int i = 0; i < childCount; i++) { + String childPackageName = deletedPs.childPackageNames.get(i); + if (disabledPs.childPackageNames != null && disabledPs.childPackageNames + .contains(childPackageName)) { + PackageRemovedInfo childInfo = outInfo.removedChildPackages.get( + childPackageName); + if (childInfo != null) { + childInfo.isRemovedPackageSystemUpdate = true; + } } } } |