Merge "Fix system server crash during movePackage"

This commit is contained in:
TreeHugger Robot
2020-12-10 16:12:43 +00:00
committed by Android (Google) Code Review
2 changed files with 11 additions and 4 deletions

View File

@@ -238,6 +238,7 @@ import android.content.pm.VersionedPackage;
import android.content.pm.dex.ArtManager;
import android.content.pm.dex.DexMetadataHelper;
import android.content.pm.dex.IArtManager;
import android.content.pm.parsing.ApkLiteParseUtils;
import android.content.pm.parsing.ParsingPackageUtils;
import android.content.pm.parsing.component.ParsedActivity;
import android.content.pm.parsing.component.ParsedInstrumentation;
@@ -248,6 +249,8 @@ import android.content.pm.parsing.component.ParsedPermissionGroup;
import android.content.pm.parsing.component.ParsedProcess;
import android.content.pm.parsing.component.ParsedProvider;
import android.content.pm.parsing.component.ParsedService;
import android.content.pm.parsing.result.ParseResult;
import android.content.pm.parsing.result.ParseTypeImpl;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.Bitmap;
@@ -15322,7 +15325,7 @@ public class PackageManagerService extends IPackageManager.Stub
InstallParams(OriginInfo origin, MoveInfo move, IPackageInstallObserver2 observer,
int installFlags, InstallSource installSource, String volumeUuid,
UserHandle user, String packageAbiOverride) {
UserHandle user, String packageAbiOverride, PackageLite packageLite) {
super(user);
this.origin = origin;
this.move = move;
@@ -15341,7 +15344,7 @@ public class PackageManagerService extends IPackageManager.Stub
this.forceQueryableOverride = false;
this.mDataLoaderType = DataLoaderType.NONE;
this.requiredInstalledVersionCode = PackageManager.VERSION_CODE_HIGHEST;
this.mPackageLite = null;
this.mPackageLite = packageLite;
}
InstallParams(File stagedDir, IPackageInstallObserver2 observer,
@@ -24182,8 +24185,12 @@ public class PackageManagerService extends IPackageManager.Stub
final Message msg = mHandler.obtainMessage(INIT_COPY);
final OriginInfo origin = OriginInfo.fromExistingFile(codeFile);
final ParseTypeImpl input = ParseTypeImpl.forDefaultParsing();
final ParseResult<PackageLite> ret = ApkLiteParseUtils.parsePackageLite(input,
new File(origin.resolvedPath), /* flags */ 0);
final PackageLite lite = ret.isSuccess() ? ret.getResult() : null;
final InstallParams params = new InstallParams(origin, move, installObserver, installFlags,
installSource, volumeUuid, user, packageAbiOverride);
installSource, volumeUuid, user, packageAbiOverride, lite);
params.setTraceMethod("movePackage").setTraceCookie(System.identityHashCode(params));
msg.obj = params;

View File

@@ -822,7 +822,7 @@ public class PackageManagerServiceUtils {
public static PackageInfoLite getMinimalPackageInfo(Context context,
PackageParser.PackageLite pkg, String packagePath, int flags, String abiOverride) {
final PackageInfoLite ret = new PackageInfoLite();
if (packagePath == null) {
if (packagePath == null || pkg == null) {
Slog.i(TAG, "Invalid package file " + packagePath);
ret.recommendedInstallLocation = PackageHelper.RECOMMEND_FAILED_INVALID_APK;
return ret;