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

Commit 8b301dba authored by Christopher Tate's avatar Christopher Tate Committed by android-build-merger
Browse files

am dbe0dd16: When scanning unbundled apps, only install the expected APK tree

automerge: d291cd40

* commit 'd291cd40':
  When scanning unbundled apps, only install the expected APK tree
parents f67c7bdd d291cd40
Loading
Loading
Loading
Loading
+25 −2
Original line number Diff line number Diff line
@@ -271,6 +271,7 @@ public class PackageManagerService extends IPackageManager.Stub {
    static final int SCAN_TRUSTED_OVERLAY = 1<<9;
    static final int SCAN_DELETE_DATA_ON_FAILURES = 1<<10;
    static final int SCAN_REPLACING = 1<<11;
    static final int SCAN_REQUIRE_KNOWN = 1<<12;
    static final int REMOVE_CHATTY = 1<<16;
@@ -1646,10 +1647,10 @@ public class PackageManagerService extends IPackageManager.Stub {
            if (!mOnlyCore) {
                EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_DATA_SCAN_START,
                        SystemClock.uptimeMillis());
                scanDirLI(mAppInstallDir, 0, scanFlags, 0);
                scanDirLI(mAppInstallDir, 0, scanFlags | SCAN_REQUIRE_KNOWN, 0);
                scanDirLI(mDrmAppPrivateInstallDir, PackageParser.PARSE_FORWARD_LOCK,
                        scanFlags, 0);
                        scanFlags | SCAN_REQUIRE_KNOWN, 0);
                /**
                 * Remove disable package settings for any updated system
@@ -5349,6 +5350,28 @@ public class PackageManagerService extends IPackageManager.Stub {
                    + " already installed.  Skipping duplicate.");
        }
        // If we're only installing presumed-existing packages, require that the
        // scanned APK is both already known and at the path previously established
        // for it.  Previously unknown packages we pick up normally, but if we have an
        // a priori expectation about this package's install presence, enforce it.
        if ((scanFlags & SCAN_REQUIRE_KNOWN) != 0) {
            PackageSetting known = mSettings.peekPackageLPr(pkg.packageName);
            if (known != null) {
                if (DEBUG_PACKAGE_SCANNING) {
                    Log.d(TAG, "Examining " + pkg.codePath
                            + " and requiring known paths " + known.codePathString
                            + " & " + known.resourcePathString);
                }
                if (!pkg.applicationInfo.getCodePath().equals(known.codePathString)
                        || !pkg.applicationInfo.getResourcePath().equals(known.resourcePathString)) {
                    throw new PackageManagerException(INSTALL_FAILED_PACKAGE_CHANGED,
                            "Application package " + pkg.packageName
                            + " found at " + pkg.applicationInfo.getCodePath()
                            + " but expected at " + known.codePathString + "; ignoring.");
                }
            }
        }
        // Initialize package source and resource directories
        File destCodeFile = new File(pkg.applicationInfo.getCodePath());
        File destResourceFile = new File(pkg.applicationInfo.getResourcePath());