From 0f269e24949a1828bd8896c97e87c0bd4ad38532 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Thu, 25 Feb 2021 17:04:06 +0100 Subject: [PATCH] QGraphicsWidget: Check for nullptrs in focus chain handling The while loops terminate if focusAfter becomes nullptr (unless we break earlier), so don't dereference those pointers without checking first. Fixes static analzyer warnings 979f2d508db4d5838f6c9b296120ce60 and 481f2ec7b5851bf19414478428f944b7 Change-Id: I60fc5999907fe3b3146d7047ee1eff197719ab31 Reviewed-by: David Skoland Reviewed-by: Oliver Eftevaag Reviewed-by: Richard Moe Gustavsen (cherry picked from commit 95e34f7fbc0f2e9ca582278f9a772b27ebf93d5f) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/graphicsview/qgraphicswidget_p.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/widgets/graphicsview/qgraphicswidget_p.cpp b/src/widgets/graphicsview/qgraphicswidget_p.cpp index 0580c6d9382..d9894555965 100644 --- a/src/widgets/graphicsview/qgraphicswidget_p.cpp +++ b/src/widgets/graphicsview/qgraphicswidget_p.cpp @@ -784,7 +784,8 @@ void QGraphicsWidgetPrivate::fixFocusChainBeforeReparenting(QGraphicsWidget *new // detach from current focus chain; skip this widget subtree. focusBefore->d_func()->focusNext = focusAfter; - focusAfter->d_func()->focusPrev = focusBefore; + if (focusAfter) + focusAfter->d_func()->focusPrev = focusBefore; if (newParent) { // attach to new parent's focus chain as the last element @@ -800,7 +801,8 @@ void QGraphicsWidgetPrivate::fixFocusChainBeforeReparenting(QGraphicsWidget *new newFocusLast->d_func()->focusNext = q; focusLast->d_func()->focusNext = newFocusAfter; - newFocusAfter->d_func()->focusPrev = focusLast; + if (newFocusAfter) + newFocusAfter->d_func()->focusPrev = focusLast; focusPrev = newFocusLast; } else { // no new parent, so just link up our own prev->last widgets.