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

Commit b625c1a7 authored by Jacob Hobbie's avatar Jacob Hobbie
Browse files

Allow protected or sticky broadcsts without flags.

Protected broadcasts don't need to be marked as exported or not exported
since they can only be sent by the system. We're also not enforcing the
flag change for sticky broadcasts since they're just asking for the most
recent value.

Test: just changing it back to what it was
Bug: 161145287
Change-Id: I0cffe51ae8ae319032c3fb54fa73f9abca5948f4
parent 6c437f55
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.