From 9112adc493a5c5272e6b55d7f0e07f21f64144a7 Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Fri, 28 Apr 2023 16:27:27 -0700 Subject: [PATCH] [pm] fail install-existing for apps deleted with KEEP_DATA BUG: 269687045 Test: manual with the following steps: $ adb install --user 10 ~/Downloads/WhatsApp.apk $ adb shell cmd package uninstall -k --user 10 com.whatsapp $ adb shell pm install-existing --user 0 com.whatsapp android.content.pm.PackageManager$NameNotFoundException: Package com.whatsapp doesn't exist Test: atest com.android.server.pm.PackageManagerTests Change-Id: I88e03093fbb76550d9ca12c4a8bfd2ef54a418f7 --- .../core/java/com/android/server/pm/DeletePackageHelper.java | 1 + .../core/java/com/android/server/pm/InstallPackageHelper.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/DeletePackageHelper.java b/services/core/java/com/android/server/pm/DeletePackageHelper.java index 9a5ee8124cb48..5f52c16d319c7 100644 --- a/services/core/java/com/android/server/pm/DeletePackageHelper.java +++ b/services/core/java/com/android/server/pm/DeletePackageHelper.java @@ -453,6 +453,7 @@ final class DeletePackageHelper { // We need to set it back to 'installed' so the uninstall // broadcasts will be sent correctly. if (DEBUG_REMOVE) Slog.d(TAG, "Not installed by other users, full delete"); + ps.setPkg(null); ps.setInstalled(true, userId); mPm.mSettings.writeKernelMappingLPr(ps); clearPackageStateAndReturn = false; diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index 1e0c95ca90136..8512ed7c6c4c1 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -653,7 +653,7 @@ final class InstallPackageHelper { synchronized (mPm.mLock) { final Computer snapshot = mPm.snapshotComputer(); pkgSetting = mPm.mSettings.getPackageLPr(packageName); - if (pkgSetting == null) { + if (pkgSetting == null || pkgSetting.getPkg() == null) { return PackageManager.INSTALL_FAILED_INVALID_URI; } if (!snapshot.canViewInstantApps(callingUid, UserHandle.getUserId(callingUid))) {