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

Commit 6b955f6c authored by Hai Zhang's avatar Hai Zhang
Browse files

Revert "Revert "Update signature permissions when package signing is changed.""

This reverts commit 2eaf8488.
Reason for revert: Fixed SigningDetails.equals() NPE in b/290558495

Fixes: 288515966
Test: KeySetHostTest#testUpgradeDefinerSigPerm{Gained,Lost}
Test: Reproduction steps in b/290558495
Change-Id: I694a565957576633ba7e1424c49a77d97fcdff26
parent 2eaf8488
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -867,12 +867,14 @@ public final class SigningDetails implements Parcelable {
            return false;
        }
        // The capabilities for the past signing certs must match as well.
        if (mPastSigningCertificates != null) {
            for (int i = 0; i < mPastSigningCertificates.length; i++) {
                if (mPastSigningCertificates[i].getFlags()
                        != that.mPastSigningCertificates[i].getFlags()) {
                    return false;
                }
            }
        }
        return true;
    }

+9 −2
Original line number Diff line number Diff line
@@ -390,7 +390,14 @@ class AppIdPermissionPolicy : SchemePolicy() {
        packageState: PackageState,
        changedPermissionNames: MutableIndexedSet<String>
    ) {
        packageState.androidPackage!!.permissions.forEachIndexed { _, parsedPermission ->
        val androidPackage = packageState.androidPackage!!
        // This may not be the same package as the old permission because the old permission owner
        // can be different, hence using this somewhat strange name to prevent misuse.
        val oldNewPackage = oldState.externalState.packageStates[packageState.packageName]
            ?.androidPackage
        val isPackageSigningChanged = oldNewPackage != null &&
                androidPackage.signingDetails != oldNewPackage.signingDetails
        androidPackage.permissions.forEachIndexed { _, parsedPermission ->
            val newPermissionInfo = PackageInfoUtils.generatePermissionInfo(
                parsedPermission, PackageManager.GET_META_DATA.toLong()
            )!!
@@ -520,7 +527,7 @@ class AppIdPermissionPolicy : SchemePolicy() {
                    newPackageName != oldPermission.packageName ||
                    newPermission.protectionLevel != oldPermission.protectionLevel || (
                        oldPermission.isReconciled && (
                            (
                            (newPermission.isSignature && isPackageSigningChanged) || (
                                newPermission.isKnownSigner &&
                                    newPermission.knownCerts != oldPermission.knownCerts
                            ) || (