diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerSession.java | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 648586e2c2d8..69db49b57bc6 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -41,6 +41,7 @@ import static com.android.server.pm.PackageInstallerService.prepareStageDir; import android.Manifest; import android.annotation.NonNull; +import android.annotation.Nullable; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.Intent; @@ -737,7 +738,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { * * @param pkgInfo The package info for {@link #params}.packagename */ - private void sealAndValidateLocked(PackageInfo pkgInfo) + private void sealAndValidateLocked(@Nullable PackageInfo pkgInfo) throws PackageManagerException { assertNoWriteFileTransfersOpenLocked(); @@ -929,7 +930,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { * Note that upgrade compatibility is still performed by * {@link PackageManagerService}. */ - private void validateInstallLocked(PackageInfo pkgInfo) throws PackageManagerException { + private void validateInstallLocked(@Nullable PackageInfo pkgInfo) + throws PackageManagerException { mPackageName = null; mVersionCode = -1; mSignatures = null; @@ -1010,6 +1012,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } if (removeSplitList.size() > 0) { + if (pkgInfo == null) { + throw new PackageManagerException(INSTALL_FAILED_INVALID_APK, + "Missing existing base package for " + mPackageName); + } + // validate split names marked for removal for (String splitName : removeSplitList) { if (!ArrayUtils.contains(pkgInfo.splitNames, splitName)) { |