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

Commit 56448aa7 authored by Jacob Hobbie's avatar Jacob Hobbie
Browse files

Revert "Revert "Allow protected or sticky broadcasts without flags.""

This reverts commit afe8e4eb.

Reason for revert: We still need this change so we're fixing it

Change-Id: Ia49f10c9d245ba90ac7c3d6a77064e6aad30f428
Fixes: 207375918
Fixes: 207380419
Fixes: 207365047
Fixes: 207365144
Fixes: 207365104
Fixes: 207377503
Fixes: 207377500
Fixes: 207377676
Fixes: 207380419
Fixes: 207380420
Fixes: 207380486
Fixes: 207381834
parent afe8e4eb
Loading
Loading
Loading
Loading
+31 −23
Original line number Diff line number Diff line
@@ -12662,9 +12662,17 @@ public class ActivityManagerService extends IActivityManager.Stub
                        "Receiver can't specify both RECEIVER_EXPORTED and RECEIVER_NOT_EXPORTED"
                                + "flag");
            }
            if (CompatChanges.isChangeEnabled(DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED,
                    callingUid)
                    && !explicitExportStateDefined) {
            // Don't enforce the flag check if we're EITHER registering for only protected
            // broadcasts, or the receiver is null (a sticky broadcast). Sticky broadcasts should
            // not be used generally, so we will be marking them as exported by default
            final boolean requireExplicitFlagForDynamicReceivers = CompatChanges.isChangeEnabled(
                    DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED, callingUid);
            if (!onlyProtectedBroadcasts) {
                if (receiver == null && !explicitExportStateDefined) {
                    // sticky broadcast, no flag specified (flag isn't required)
                    flags |= Context.RECEIVER_EXPORTED;
                } else if (requireExplicitFlagForDynamicReceivers && !explicitExportStateDefined) {
                    if (ENFORCE_DYNAMIC_RECEIVER_EXPLICIT_EXPORT) {
                        throw new SecurityException(
                                callerPackage + ": Targeting T+ (version "
@@ -12682,12 +12690,12 @@ public class ActivityManagerService extends IActivityManager.Stub
                        // Assume default behavior-- flag check is not enforced
                        flags |= Context.RECEIVER_EXPORTED;
                    }
            } else if (!CompatChanges.isChangeEnabled(DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED,
                    callingUid)) {
                } else if (!requireExplicitFlagForDynamicReceivers) {
                    // Change is not enabled, thus not targeting T+. Assume exported.
                    flags |= Context.RECEIVER_EXPORTED;
                }
            }
        }
        // Dynamic receivers are exported by default for versions prior to T
        final boolean exported = (flags & Context.RECEIVER_EXPORTED) != 0;
@@ -12703,7 +12711,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                        (intent.getFlags() & Intent.FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS) == 0) {
                    continue;
                }
                // If intent has scheme "content", it will need to acccess
                // If intent has scheme "content", it will need to access
                // provider that needs to lock mProviderMap in ActivityThread
                // and also it may need to wait application response, so we
                // cannot lock ActivityManagerService here.