From 25dd9db2930d385186169ee6eca375a4adf6cf56 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 29 Aug 2025 13:25:46 +0000 Subject: [PATCH] Fix critical QWidgetItem memory leak in ensureWidgetContainsEmptyGridLayout Address sanitizer detected a 1056-byte memory leak in QWidgetItem objects. This was the actual root cause of the leak reported in the stack trace. Problem: In ensureWidgetContainsEmptyGridLayout(), when clearing existing layouts, the code was calling layout->takeAt(0) to remove QLayoutItem objects but never deleting them. This caused QWidgetItem objects to accumulate in memory without ever being freed. The takeAt() method removes items from the layout but does NOT delete them. The caller is responsible for deleting the returned QLayoutItem objects. Fix: Added `delete item;` in the cleanup loop to properly free QWidgetItem objects when clearing layouts before rebuilding the UI. --- Fwk/AppFwk/cafUserInterface/cafPdmUiFormLayoutObjectEditor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiFormLayoutObjectEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiFormLayoutObjectEditor.cpp index f1296e94e7..b1a69a7eeb 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiFormLayoutObjectEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiFormLayoutObjectEditor.cpp @@ -454,6 +454,7 @@ void caf::PdmUiFormLayoutObjectEditor::ensureWidgetContainsEmptyGridLayout( QWid QLayoutItem* item; while ( ( item = layout->takeAt( 0 ) ) != 0 ) { + delete item; } QWidget().setLayout( layout ); }