From 33f65534b353118b89f896eda5e29a86e50ea357 Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Wed, 29 Apr 2020 00:05:58 -0700 Subject: [PATCH] Null check while removing suspensions Packages passed to package manager may not exist as DevicePolicyManager#setUninstallBlocked can be called on non-existent packages. Test: Builds, existing tests pass. Bug: 150161010 Bug: 155933497 Change-Id: Ie4ec6c429fde8567b25e9ac06d54a7354d780661 --- .../java/com/android/server/pm/PackageManagerService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index fd861b56b729..6bb10c79d382 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -13451,7 +13451,7 @@ void removeSuspensionsBySuspendingPackage(String[] packagesToChange, synchronized (mLock) { for (String packageName : packagesToChange) { final PackageSetting ps = mSettings.mPackages.get(packageName); - if (ps.getSuspended(userId)) { + if (ps != null && ps.getSuspended(userId)) { ps.removeSuspension(suspendingPackagePredicate, userId); if (!ps.getSuspended(userId)) { unsuspendedPackages.add(ps.name); @@ -13492,7 +13492,7 @@ void removeDistractingPackageRestrictions(String[] packagesToChange, int userId) synchronized (mLock) { for (String packageName : packagesToChange) { final PackageSetting ps = mSettings.mPackages.get(packageName); - if (ps.getDistractionFlags(userId) != 0) { + if (ps != null && ps.getDistractionFlags(userId) != 0) { ps.setDistractionFlags(0, userId); changedPackages.add(ps.name); changedUids.add(UserHandle.getUid(userId, ps.getAppId())); @@ -18884,6 +18884,7 @@ public boolean setBlockUninstallForUser(String packageName, boolean blockUninsta int userId) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.DELETE_PACKAGES, null); + // TODO (b/157774108): This should fail on non-existent packages. synchronized (mLock) { // Cannot block uninstall of static shared libs as they are // considered a part of the using app (emulating static linking).