diff options
| author | 2015-01-21 15:25:56 -0800 | |
|---|---|---|
| committer | 2015-01-22 07:32:12 -0800 | |
| commit | d2f1511f2896e09db35bd92e0aab02ba89888a04 (patch) | |
| tree | 85560cd75857197fccc5493bc5fe91bb71d25026 | |
| parent | e1f183d01be8893bfb686731fd00156c6c45c15e (diff) | |
Don't get extras from the Intent
When handling Intents in the system process, we need to be careful
to not cause the extras bundle to be unparcelled. If the extra is
unparcelled, any custom class added to the extras will throw a
ClassCastException during the unparcel. For legacy reasons, we
would get the "seq" extra from the Intent for broadcast debugging.
This violates our requirement to not unparcel extras in the system
server process.
Bug: 19068243
Change-Id: I6cac426a0ef8648a05ded69ee4ac244017d9b5d1
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 15 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/BroadcastQueue.java | 15 |
2 files changed, 11 insertions, 19 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index a2f5c15fa94b..f56499998334 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -7051,7 +7051,6 @@ public final class ActivityManagerService extends ActivityManagerNative return; } - final IPackageManager pm = AppGlobals.getPackageManager(); final String authority = uri.getAuthority(); final ProviderInfo pi = getProviderInfoLocked(authority, userId); if (pi == null) { @@ -15733,14 +15732,14 @@ public final class ActivityManagerService extends ActivityManagerNative callerPackage, callingPid, callingUid, resolvedType, requiredPermission, appOp, receivers, resultTo, resultCode, resultData, map, ordered, sticky, false, userId); + if (DEBUG_BROADCAST) Slog.v( TAG, "Enqueueing ordered broadcast " + r + ": prev had " + queue.mOrderedBroadcasts.size()); - if (DEBUG_BROADCAST) { - int seq = r.intent.getIntExtra("seq", -1); - Slog.i(TAG, "Enqueueing broadcast " + r.intent.getAction() + " seq=" + seq); - } - boolean replaced = replacePending && queue.replaceOrderedBroadcastLocked(r); + if (DEBUG_BROADCAST) Slog.i( + TAG, "Enqueueing broadcast " + r.intent.getAction()); + + boolean replaced = replacePending && queue.replaceOrderedBroadcastLocked(r); if (!replaced) { queue.enqueueOrderedBroadcastLocked(r); queue.scheduleBroadcastsLocked(); @@ -18289,8 +18288,8 @@ public final class ActivityManagerService extends ActivityManagerNative } } - private Set getProfileIdsLocked(int userId) { - Set userIds = new HashSet<Integer>(); + private Set<Integer> getProfileIdsLocked(int userId) { + Set<Integer> userIds = new HashSet<Integer>(); final List<UserInfo> profiles = getUserManagerLocked().getProfiles( userId, false /* enabledOnly */); for (UserInfo user : profiles) { diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java index 9b7d0b2eb293..7ab379487117 100644 --- a/services/core/java/com/android/server/am/BroadcastQueue.java +++ b/services/core/java/com/android/server/am/BroadcastQueue.java @@ -513,11 +513,7 @@ public final class BroadcastQueue { } } try { - if (DEBUG_BROADCAST_LIGHT) { - int seq = r.intent.getIntExtra("seq", -1); - Slog.i(TAG, "Delivering to " + filter - + " (seq=" + seq + "): " + r); - } + if (DEBUG_BROADCAST_LIGHT) Slog.i(TAG, "Delivering to " + filter + " : " + r); performReceiveLocked(filter.receiverList.app, filter.receiverList.receiver, new Intent(r.intent), r.resultCode, r.resultData, r.resultExtras, r.ordered, r.initialSticky, r.userId); @@ -662,12 +658,9 @@ public final class BroadcastQueue { // result if requested... if (r.resultTo != null) { try { - if (DEBUG_BROADCAST) { - int seq = r.intent.getIntExtra("seq", -1); - Slog.i(TAG, "Finishing broadcast [" - + mQueueName + "] " + r.intent.getAction() - + " seq=" + seq + " app=" + r.callerApp); - } + if (DEBUG_BROADCAST) Slog.i(TAG, + "Finishing broadcast [" + mQueueName + "] " + + r.intent.getAction() + " app=" + r.callerApp); performReceiveLocked(r.callerApp, r.resultTo, new Intent(r.intent), r.resultCode, r.resultData, r.resultExtras, false, false, r.userId); |