From cfa39d19063eb448960c2b3e75eb4f494802458e Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Fri, 8 Feb 2019 18:20:07 -0800 Subject: [PATCH] Don't crash when a broadcast requires an unknown permission Bug: 117104008 Test: manual Test: tests/ActivityTests Change-Id: I1a7918ca33de4f8df092ae79d5ceab313e501a41 --- .../core/java/com/android/server/am/BroadcastQueue.java | 5 +++++ .../google/android/test/activity/ActivityTestMain.java | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index f0b137a6ccb1d..ad7158d25637a 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -898,6 +898,11 @@ public final class BroadcastQueue { for (int i = perms.length-1; i >= 0; i--) { try { PermissionInfo pi = pm.getPermissionInfo(perms[i], "android", 0); + if (pi == null) { + // a required permission that no package has actually + // defined cannot be signature-required. + return false; + } if ((pi.protectionLevel & (PermissionInfo.PROTECTION_MASK_BASE | PermissionInfo.PROTECTION_FLAG_PRIVILEGED)) != PermissionInfo.PROTECTION_SIGNATURE) { diff --git a/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java b/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java index d5549cc1355e7..07b3a97817a3c 100644 --- a/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java +++ b/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java @@ -439,6 +439,14 @@ public class ActivityTestMain extends Activity { return true; } }); + menu.add("Require unknown permission").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override public boolean onMenuItemClick(MenuItem item) { + final Intent intent = new Intent(SLOW_RECEIVER_ACTION); + intent.putExtra(SLOW_RECEIVER_EXTRA, 5038); + sendOrderedBroadcast(intent, "com.google.android.test.activity.permission.UNDEFINED"); + return true; + } + }); menu.add("Stack Doc").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { ActivityManager.AppTask task = findDocTask();