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

Commit be634951 authored by Craig Mautner's avatar Craig Mautner
Browse files

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
parent 92b7c67e
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -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);

                long origId = Binder.clearCallingIdentity();
                try {
                    mStack.finishAllActivitiesLocked();
                } finally {
                    Binder.restoreCallingIdentity(origId);
                }
            }
        }

+5 −1
Original line number Diff line number Diff line
@@ -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() {