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

Commit 1a3216bb authored by Todd Kennedy's avatar Todd Kennedy
Browse files

Don't propagate unrequested permissions

When an instant app is re-installed, we attempt to propagate the
previously accepted permissions. Instead of crashing the system_server,
we simply ignore the previously granted permission and forget that
the user ever granted it. If a second update to the instant app
re-requests the permission, the user will again have to accept or
deny.

Test: atest GtsPackageManagerHostTestCases:PackageManagerHostTest
Change-Id: I7bb9fb67159f6c4d4f4e2a24e7913d11713e826e
Fixes: 72698203
parent 5931b2d1
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -274,7 +274,7 @@ class InstantAppRegistry {
            }

            // Propagate permissions before removing any state
            propagateInstantAppPermissionsIfNeeded(pkg.packageName, userId);
            propagateInstantAppPermissionsIfNeeded(pkg, userId);

            // Track instant apps
            if (ps.getInstantApp(userId)) {
@@ -869,10 +869,10 @@ class InstantAppRegistry {
        return uninstalledApps;
    }

    private void propagateInstantAppPermissionsIfNeeded(@NonNull String packageName,
    private void propagateInstantAppPermissionsIfNeeded(@NonNull PackageParser.Package pkg,
            @UserIdInt int userId) {
        InstantAppInfo appInfo = peekOrParseUninstalledInstantAppInfo(
                packageName, userId);
                pkg.packageName, userId);
        if (appInfo == null) {
            return;
        }
@@ -884,8 +884,8 @@ class InstantAppRegistry {
            for (String grantedPermission : appInfo.getGrantedPermissions()) {
                final boolean propagatePermission =
                        mService.mSettings.canPropagatePermissionToInstantApp(grantedPermission);
                if (propagatePermission) {
                    mService.grantRuntimePermission(packageName, grantedPermission, userId);
                if (propagatePermission && pkg.requestedPermissions.contains(grantedPermission)) {
                    mService.grantRuntimePermission(pkg.packageName, grantedPermission, userId);
                }
            }
        } finally {