From 29dabab2f536827bc1ecec63f5a0b0a76f0809e5 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Tue, 9 Mar 2021 14:30:44 +0000 Subject: [PATCH] Fix potential crash in SizeGroup SizeGroup keeps a cache of a list of items, and when one updates does calculations based on all items. This list is stored as a list of QPointers as we don't explicitly track deletion. We have a list of items and guard for deletion, but they're QML owned. So there's a point in time when it's pending deletion with the garbage collector but the lower level object isn't managed by an engine. As we go via QQmlProperty(item, QStringLiteral("Layout.preferredWidth"), qmlContext(item)).write(maxWidth) this is problematic. BUG: 434079 --- src/sizegroup.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/sizegroup.cpp b/src/sizegroup.cpp index 2035b6eb..a9a0ebf8 100644 --- a/src/sizegroup.cpp +++ b/src/sizegroup.cpp @@ -98,6 +98,10 @@ void SizeGroup::adjustItems(Mode whatChanged) continue; } + if (!qmlEngine(item)) { + continue; + } + switch (m_mode) { case Mode::Width: QQmlProperty(item, QStringLiteral("Layout.preferredWidth"), qmlContext(item)).write(maxWidth); -- GitLab