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

Commit 7d819d45 authored by Michael Groover's avatar Michael Groover
Browse files

Add unaudited exported flag to exposed runtime receivers

Android T allows apps to declare a runtime receiver as not exported
by invoking registerReceiver with a new RECEIVER_NOT_EXPORTED flag;
receivers registered with this flag will only receive broadcasts from
the platform and the app itself. However to ensure developers can
properly protect their receivers, all apps targeting U or later
registering a receiver for non-system broadcasts must specify either
the exported or not exported flag when invoking #registerReceiver;
if one of these flags is not provided, the platform will throw a
SecurityException. This commit updates all the exposed receivers
with a new RECEIVER_EXPORTED_UNAUDITED flag to maintain the existing
behavior of exporting the receiver while also flagging the receiver
for audit before the U release.

Bug: 234659204
Test: Build
Change-Id: Iaead564629e58a747e481494ead501d30bc23079
parent a0667ba5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -471,7 +471,7 @@ public class DownloadManagerBaseTest extends InstrumentationTestCase {
    protected MultipleDownloadsCompletedReceiver registerNewMultipleDownloadsReceiver() {
        MultipleDownloadsCompletedReceiver receiver = new MultipleDownloadsCompletedReceiver();
        mContext.registerReceiver(receiver, new IntentFilter(
                DownloadManager.ACTION_DOWNLOAD_COMPLETE));
                DownloadManager.ACTION_DOWNLOAD_COMPLETE), Context.RECEIVER_EXPORTED_UNAUDITED);
        return receiver;
    }

+2 −1
Original line number Diff line number Diff line
@@ -49,7 +49,8 @@ public class BroadcastReceiverTests {
        final IntentFilter mockFilter = new IntentFilter("android.content.tests.TestAction");
        try {
            for (int i = 0; i < RECEIVER_LIMIT_PER_APP + 1; i++) {
                mContext.registerReceiver(new EmptyReceiver(), mockFilter);
                mContext.registerReceiver(new EmptyReceiver(), mockFilter,
                        Context.RECEIVER_EXPORTED_UNAUDITED);
            }
            fail("No exception thrown when registering "
                    + (RECEIVER_LIMIT_PER_APP + 1) + " receivers");
+1 −1
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ public class ActionSendMultipleConsumerActivity extends Activity {

            final IntentFilter filter = new IntentFilter();
            filter.addAction(CUSTOM_ACTION_SEND_MULTIPLE_INTENT);
            context.registerReceiver(receiver, filter);
            context.registerReceiver(receiver, filter, Context.RECEIVER_EXPORTED_UNAUDITED);
        }

        /**
+1 −1
Original line number Diff line number Diff line
@@ -326,7 +326,7 @@ public class SystemActionPerformerTest {

        void register(Context context) {
            if (!mRegistered) {
                context.registerReceiver(this, mFilter);
                context.registerReceiver(this, mFilter, Context.RECEIVER_EXPORTED_UNAUDITED);
                mRegistered = true;
            }
        }
+2 −1
Original line number Diff line number Diff line
@@ -3470,7 +3470,8 @@ public class AccountManagerServiceTest extends AndroidTestCase {

        @Override
        public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
            return mMockContext.registerReceiver(receiver, filter);
            return mMockContext.registerReceiver(receiver, filter,
                    Context.RECEIVER_EXPORTED_UNAUDITED);
        }

        @Override
Loading