summaryrefslogtreecommitdiff
path: root/vcl/source/window/event.cxx
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2020-02-11 21:06:06 +0100
committerMiklos Vajna <vmiklos@collabora.com>2020-02-12 09:10:55 +0100
commitd1378b92c6697c09def7b3db8b36c3cf883b55c4 (patch)
treecb863bc392cf48d1ac9d43dc3bb642897b7fd542 /vcl/source/window/event.cxx
parent2ce99d12771407631288af5a12fe2165ae3599d8 (diff)
vcl: fix UB in Window::ImplGetFirstOverlapWindow()
mpWindowImpl can be nullptr here, see online.git's unit-load-torture test: vcl/source/window/window2.cxx:882:24: runtime error: member access within null pointer of type 'WindowImpl' SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior vcl/source/window/window2.cxx:882:24 in Surrouding code already checks for nullptr mpWindowImpl, so fix it directly where the problem is reported, not a caller. (Also fix a similar case in Window::ImplCallFocusChangeActivate().) Change-Id: I34dee0fd49483c428a78fd48b54c00b2f0a26417 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88474 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'vcl/source/window/event.cxx')
-rw-r--r--vcl/source/window/event.cxx10
1 files changed, 10 insertions, 0 deletions
diff --git a/vcl/source/window/event.cxx b/vcl/source/window/event.cxx
index 31733682c18f..a31964ecd7fd 100644
--- a/vcl/source/window/event.cxx
+++ b/vcl/source/window/event.cxx
@@ -588,7 +588,17 @@ void Window::ImplCallFocusChangeActivate( vcl::Window* pNewOverlapWindow,
bool bCallActivate = true;
bool bCallDeactivate = true;
+ if (!pOldOverlapWindow)
+ {
+ return;
+ }
+
pOldRealWindow = pOldOverlapWindow->ImplGetWindow();
+ if (!pNewOverlapWindow)
+ {
+ return;
+ }
+
pNewRealWindow = pNewOverlapWindow->ImplGetWindow();
if ( (pOldRealWindow->GetType() != WindowType::FLOATINGWINDOW) ||
pOldRealWindow->GetActivateMode() != ActivateModeFlags::NONE )