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

Commit 376e4ba9 authored by Nicolas Prevot's avatar Nicolas Prevot
Browse files

When forwarding intents, ignoring the package set in the intent.

Apps should not be allowed to target a specific package in the target user.

BUG: 17025506

Change-Id: I81afa2f8d0a1114d91c001e357366792c63b6577
parent b734e9d2
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -76,17 +76,19 @@ public class IntentForwarderActivity extends Activity {
        }
        Intent newIntent = new Intent(intentReceived);
        newIntent.setComponent(null);
        // Apps should not be allowed to target a specific package in the target user.
        newIntent.setPackage(null);
        newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT
                |Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
        int callingUserId = getUserId();
        IPackageManager ipm = AppGlobals.getPackageManager();
        String resolvedType = newIntent.resolveTypeIfNeeded(getContentResolver());
        boolean canForward = false;
        try {
        Intent selector = newIntent.getSelector();
        if (selector == null) {
            selector = newIntent;
        }
        try {
            canForward = ipm.canForwardTo(selector, resolvedType, callingUserId,
                    userDest.getIdentifier());
        } catch (RemoteException e) {
+11 −13
Original line number Diff line number Diff line
@@ -3192,19 +3192,15 @@ public class PackageManagerService extends IPackageManager.Stub {
                if (matches.get(i).getTargetUserId() == targetUserId) return true;
            }
        }
        ArrayList<String> packageNames = null;
        SparseArray<ArrayList<String>> fromSource =
                mSettings.mCrossProfilePackageInfo.get(sourceUserId);
        if (fromSource != null) {
            packageNames = fromSource.get(targetUserId);
        }
        if (packageNames != null && packageNames.contains(intent.getPackage())) {
            return true;
        }
            if (packageNames != null) {
                // We need the package name, so we try to resolve with the loosest flags possible
        List<ResolveInfo> resolveInfos = mActivities.queryIntent(
                intent, resolvedType, PackageManager.GET_UNINSTALLED_PACKAGES, targetUserId);
                List<ResolveInfo> resolveInfos = mActivities.queryIntent(intent, resolvedType,
                        PackageManager.GET_UNINSTALLED_PACKAGES, targetUserId);
                int count = resolveInfos.size();
                for (int i = 0; i < count; i++) {
                    ResolveInfo resolveInfo = resolveInfos.get(i);
@@ -3212,6 +3208,8 @@ public class PackageManagerService extends IPackageManager.Stub {
                        return true;
                    }
                }
            }
        }
        return false;
    }