From 4b5a9a09e55a81a1c060cd42e673066afd71e554 Mon Sep 17 00:00:00 2001 From: Mark Lu Date: Tue, 9 Dec 2014 14:47:13 +0800 Subject: [PATCH] [ActivityManager] fix NPE in ActivityStack.resetTargetTaskIfNeededLocked. Symptom: in .ActivityStack.resetTargetTaskIfNeededLocked, "allowTaskReparenting" if case will call setTask to remove activities from task, that will caused numActivities in main for-loop not consist with task.mActivities size. caused NPE will happend in finish activities for-loop due to get null object from activities when clearWhenTaskReset" as true case. Root Cause: when clearWhenTaskReset as true, will set "end" variable as numActivities -1, but if calling setTask to remove activities from task, end value will out of date & not same with task.mActivities size. Solution: use activities.size() - 1 to assign end value. Change-Id: I5d7fe22e1df2fc61738db23402e7c42cf6d8c4cc --- services/core/java/com/android/server/am/ActivityStack.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index df4bf282e6de9..0c23e585fa380 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -2269,7 +2269,7 @@ final class ActivityStack { // In this case, we want to finish this activity // and everything above it, so be sneaky and pretend // like these are all in the reply chain. - end = numActivities - 1; + end = activities.size() - 1; } else if (replyChainEnd < 0) { end = i; } else {