Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8477fe56 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Fix some bugs for robustness." into rvc-dev am: 4cbd3b7a

Change-Id: I3b03ea15a76db676c9f595bd585c1106d10460f8
parents c2e3aad2 4cbd3b7a
Loading
Loading
Loading
Loading
+24 −17
Original line number Diff line number Diff line
@@ -239,23 +239,23 @@ public class AppIntegrityManagerServiceImpl extends IAppIntegrityManager.Stub {
            Slog.i(TAG, "Received integrity verification intent " + intent.toString());
            Slog.i(TAG, "Extras " + intent.getExtras());

            String packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME);
            String installerPackageName = getInstallerPackageName(intent);

            PackageInfo packageInfo = getPackageArchiveInfo(intent.getData());
            if (packageInfo == null) {
                Slog.w(TAG, "Cannot parse package " + packageName);
                // We can't parse the package.
            // Skip integrity verification if the verifier is doing the install.
            if (!integrityCheckIncludesRuleProvider()
                    && isRuleProvider(installerPackageName)) {
                Slog.i(TAG, "Verifier doing the install. Skipping integrity check.");
                mPackageManagerInternal.setIntegrityVerificationResult(
                        verificationId, PackageManagerInternal.INTEGRITY_VERIFICATION_ALLOW);
                return;
            }

            String installerPackageName = getInstallerPackageName(intent);
            String packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME);

            // Skip integrity verification if the verifier is doing the install.
            if (!integrityCheckIncludesRuleProvider()
                    && isRuleProvider(installerPackageName)) {
                Slog.i(TAG, "Verifier doing the install. Skipping integrity check.");
            PackageInfo packageInfo = getPackageArchiveInfo(intent.getData());
            if (packageInfo == null) {
                Slog.w(TAG, "Cannot parse package " + packageName);
                // We can't parse the package.
                mPackageManagerInternal.setIntegrityVerificationResult(
                        verificationId, PackageManagerInternal.INTEGRITY_VERIFICATION_ALLOW);
                return;
@@ -508,7 +508,8 @@ public class AppIntegrityManagerServiceImpl extends IAppIntegrityManager.Stub {
            return PackageInfoUtils.generate(pkg, null, flags, 0, 0, null, new PackageUserState(),
                    UserHandle.getCallingUserId(), null);
        } catch (Exception e) {
            throw new IllegalArgumentException("Exception reading " + dataUri, e);
            Slog.w(TAG, "Exception reading " + dataUri, e);
            return null;
        }
    }

@@ -530,12 +531,18 @@ public class AppIntegrityManagerServiceImpl extends IAppIntegrityManager.Stub {

                // If we didn't find a base.apk, then try to parse each apk until we find the one
                // that succeeds.
                try {
                    basePackageInfo =
                            mContext.getPackageManager()
                                    .getPackageArchiveInfo(
                                            apkFile.getAbsolutePath(),
                                            PackageManager.GET_SIGNING_CERTIFICATES
                                                    | PackageManager.GET_META_DATA);
                } catch (Exception e) {
                    // Some of the splits may not contain a valid android manifest. It is an
                    // expected exception. We still log it nonetheless but we should keep looking.
                    Slog.w(TAG, "Exception reading " + apkFile, e);
                }
                if (basePackageInfo != null) {
                    Slog.i(TAG, "Found package info from " + apkFile);
                    break;