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

Commit b4037e14 authored by John Wu's avatar John Wu
Browse files

Exempt connected apps from intent filter enforcement to itself

Directly use ActivityManager#checkComponentPermission() to check whether
the components should be exempted from the intent filter enforcement
added in T.

Bug: 234103620
Test: atest CtsContentTestCases:PackageManagerTest
Change-Id: I67d1b4bb7d3520370fa9095fb81189acb6c3ebc1
parent eb700c00
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static com.android.server.pm.PackageManagerService.TAG;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.content.Context;
@@ -1089,12 +1090,6 @@ public class PackageManagerServiceUtils {
            PlatformCompat compat, ComponentResolverApi resolver,
            List<ResolveInfo> resolveInfos, boolean isReceiver,
            Intent intent, String resolvedType, int filterCallingUid) {
        // Do not enforce filter matching when the caller is system or root.
        // see ActivityManager#checkComponentPermission(String, int, int, boolean)
        if (filterCallingUid == Process.ROOT_UID || filterCallingUid == Process.SYSTEM_UID) {
            return;
        }

        final Printer logPrinter = DEBUG_INTENT_MATCHING
                ? new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM)
                : null;
@@ -1102,8 +1097,9 @@ public class PackageManagerServiceUtils {
        for (int i = resolveInfos.size() - 1; i >= 0; --i) {
            final ComponentInfo info = resolveInfos.get(i).getComponentInfo();

            // Do not enforce filter matching when the caller is the same app
            if (info.applicationInfo.uid == filterCallingUid) {
            // Do not enforce filter matching when the caller is system, root, or the same app
            if (ActivityManager.checkComponentPermission(null, filterCallingUid,
                    info.applicationInfo.uid, false) == PackageManager.PERMISSION_GRANTED) {
                continue;
            }