Fix permission problem and NPE

Remove uid before calling into Window Manager. Restore afterwards.

Check for null stack value before dereferencing.

Fixes bug 15591112.

Change-Id: Ida3de556940440162c91b8c1614d0f21e364abd8
This commit is contained in:
Craig Mautner
2014-06-12 13:39:24 -07:00
parent 92b7c67e71
commit be63495101
2 changed files with 16 additions and 2 deletions

View File

@@ -2768,16 +2768,19 @@ public final class ActivityStackSupervisor implements DisplayListener {
@Override
public void onDisplayAdded(int displayId) {
Slog.v(TAG, "Display added displayId=" + displayId);
mHandler.sendMessage(mHandler.obtainMessage(HANDLE_DISPLAY_ADDED, displayId, 0));
}
@Override
public void onDisplayRemoved(int displayId) {
Slog.v(TAG, "Display removed displayId=" + displayId);
mHandler.sendMessage(mHandler.obtainMessage(HANDLE_DISPLAY_REMOVED, displayId, 0));
}
@Override
public void onDisplayChanged(int displayId) {
Slog.v(TAG, "Display changed displayId=" + displayId);
mHandler.sendMessage(mHandler.obtainMessage(HANDLE_DISPLAY_CHANGED, displayId, 0));
}
@@ -3048,10 +3051,17 @@ public final class ActivityStackSupervisor implements DisplayListener {
return;
}
mContainerState = CONTAINER_STATE_FINISHING;
final Message msg =
mHandler.obtainMessage(CONTAINER_TASK_LIST_EMPTY_TIMEOUT, this);
mHandler.sendMessageDelayed(msg, 1000);
mStack.finishAllActivitiesLocked();
long origId = Binder.clearCallingIdentity();
try {
mStack.finishAllActivitiesLocked();
} finally {
Binder.restoreCallingIdentity(origId);
}
}
}

View File

@@ -715,7 +715,11 @@ final class WindowState implements WindowManagerPolicy.WindowState {
}
public DisplayContent getDisplayContent() {
return mAppToken == null ? mDisplayContent : getStack().getDisplayContent();
if (mAppToken == null) {
return mDisplayContent;
}
final TaskStack stack = getStack();
return stack == null ? mDisplayContent : stack.getDisplayContent();
}
public int getDisplayId() {