From f82ea82403607e52373612aa7f4fad0fd6c7e079 Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Wed, 31 Mar 2021 10:00:28 +0100 Subject: [PATCH] Harden Item::layoutEqually() Could cause an infinit loop if the layout was corrupted --- src/private/MultiSplitter.cpp | 3 +++ src/private/multisplitter/Item.cpp | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/private/MultiSplitter.cpp b/src/private/MultiSplitter.cpp index dbed9e68..d381e8a3 100644 --- a/src/private/MultiSplitter.cpp +++ b/src/private/MultiSplitter.cpp @@ -361,6 +361,9 @@ void MultiSplitter::restorePlaceholder(DockWidgetBase *dw, Layouting::Item *item void MultiSplitter::layoutEqually() { + if (!checkSanity()) + return; + layoutEqually(m_rootItem); } diff --git a/src/private/multisplitter/Item.cpp b/src/private/multisplitter/Item.cpp index 199ff4d9..91b5e36f 100644 --- a/src/private/multisplitter/Item.cpp +++ b/src/private/multisplitter/Item.cpp @@ -2407,6 +2407,11 @@ void ItemBoxContainer::layoutEqually(SizingInfo::List &sizes) } if (lengthToGive == 0) return; + + if (lengthToGive < 0) { + qWarning() << Q_FUNC_INFO << "Breaking infinit loop"; + return; + } } }