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

Commit 39cdae1f authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

Installation fail for mismatched certificates.

Bug: 213398637
Fixes: 213398637
Test: atest PackageManagerShellCommandTest
Change-Id: Iab480157163627af2a2e9c49439460b2f58810c2
parent 9b33de7b
Loading
Loading
Loading
Loading
+25 −5
Original line number Diff line number Diff line
@@ -1207,17 +1207,33 @@ final class InstallPackageHelper {
            }

            PackageSetting ps = mPm.mSettings.getPackageLPr(pkgName);
            if (ps != null) {
                if (DEBUG_INSTALL) Slog.d(TAG, "Existing package: " + ps);
            PackageSetting signatureCheckPs = ps;

            // SDK libs can have other major versions with different package names.
            if (signatureCheckPs == null && parsedPackage.isSdkLibrary()) {
                WatchedLongSparseArray<SharedLibraryInfo> libraryInfos =
                        mSharedLibraries.getSharedLibraryInfos(
                                parsedPackage.getSdkLibName());
                if (libraryInfos != null && libraryInfos.size() > 0) {
                    // Any existing version would do.
                    SharedLibraryInfo libraryInfo = libraryInfos.valueAt(0);
                    signatureCheckPs = mPm.mSettings.getPackageLPr(libraryInfo.getPackageName());
                }
            }

            if (signatureCheckPs != null) {
                if (DEBUG_INSTALL) {
                    Slog.d(TAG,
                            "Existing package for signature checking: " + signatureCheckPs);
                }

                // Static shared libs have same package with different versions where
                // we internally use a synthetic package name to allow multiple versions
                // of the same package, therefore we need to compare signatures against
                // the package setting for the latest library version.
                PackageSetting signatureCheckPs = ps;
                if (parsedPackage.isStaticSharedLibrary()) {
                    SharedLibraryInfo libraryInfo = mSharedLibraries.getLatestSharedLibraVersionLPr(
                            parsedPackage);
                    SharedLibraryInfo libraryInfo =
                            mSharedLibraries.getLatestStaticSharedLibraVersionLPr(parsedPackage);
                    if (libraryInfo != null) {
                        signatureCheckPs = mPm.mSettings.getPackageLPr(
                                libraryInfo.getPackageName());
@@ -1256,6 +1272,10 @@ final class InstallPackageHelper {
                        throw new PrepareFailure(e.error, e.getMessage());
                    }
                }
            }

            if (ps != null) {
                if (DEBUG_INSTALL) Slog.d(TAG, "Existing package: " + ps);

                if (ps.getPkg() != null) {
                    systemApp = ps.getPkg().isSystem();
+2 −2
Original line number Diff line number Diff line
@@ -384,7 +384,7 @@ public final class SharedLibrariesImpl implements SharedLibrariesRead, Watchable
     * @return The latest version of shared library info.
     */
    @GuardedBy("mPm.mLock")
    @Nullable SharedLibraryInfo getLatestSharedLibraVersionLPr(@NonNull AndroidPackage pkg) {
    @Nullable SharedLibraryInfo getLatestStaticSharedLibraVersionLPr(@NonNull AndroidPackage pkg) {
        WatchedLongSparseArray<SharedLibraryInfo> versionedLib = mSharedLibraries.get(
                pkg.getStaticSharedLibName());
        if (versionedLib == null) {
@@ -416,7 +416,7 @@ public final class SharedLibrariesImpl implements SharedLibrariesRead, Watchable
        PackageSetting sharedLibPackage = null;
        synchronized (mPm.mLock) {
            final SharedLibraryInfo latestSharedLibraVersionLPr =
                    getLatestSharedLibraVersionLPr(scanResult.mRequest.mParsedPackage);
                    getLatestStaticSharedLibraVersionLPr(scanResult.mRequest.mParsedPackage);
            if (latestSharedLibraVersionLPr != null) {
                sharedLibPackage = mPm.mSettings.getPackageLPr(
                        latestSharedLibraVersionLPr.getPackageName());
+2 −1
Original line number Diff line number Diff line
@@ -196,7 +196,8 @@ class SharedLibrariesImplTest {
        val newLibSetting = addPackage(STATIC_LIB_PACKAGE_NAME + "_" + 10, 10L,
            staticLibrary = STATIC_LIB_NAME, staticLibraryVersion = 10L)

        val latestInfo = mSharedLibrariesImpl.getLatestSharedLibraVersionLPr(newLibSetting.pkg)!!
        val latestInfo =
            mSharedLibrariesImpl.getLatestStaticSharedLibraVersionLPr(newLibSetting.pkg)!!

        assertThat(latestInfo).isNotNull()
        assertThat(latestInfo.name).isEqualTo(STATIC_LIB_NAME)