Fix four memory leaks found by AddressSanitizer

- StyleEditor: QGridLayout(this) pre-empted the widget's layout slot,
  causing setLayout(main_layout) to silently fail and orphan main_layout.
  Fix: use QGridLayout() without a parent so setLayout() succeeds.

- ExportDialog: ~ExportDialog() was empty, leaving ExportDiagramLine
  heap objects in diagram_lines_ unfreed. Fix: qDeleteAll(diagram_lines_).

- GenericPanel::getItemForDiagram: when called without the bool* created
  arg, it created a parentless QTreeWidgetItem that callers immediately
  discarded. Fix: return nullptr when created==nullptr and item not found
  (all callers already guard with if (item)).

- ElementScene: m_paste_area (created in initPasteArea) was temporarily
  added/removed from the scene during XML loading but never freed in the
  destructor. Fix: delete it if not currently in the scene.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Shane Ringrose
2026-06-21 01:45:07 +12:00
parent a8e2a7acff
commit 8a837a11d4
4 changed files with 9 additions and 3 deletions
+3
View File
@@ -107,6 +107,9 @@ ElementScene::~ElementScene()
if (m_decorator)
delete m_decorator;
if (m_paste_area && !m_paste_area->scene())
delete m_paste_area;
}
/**
+1 -1
View File
@@ -386,7 +386,7 @@ StyleEditor::StyleEditor(QETElementEditor *editor, CustomElementGraphicPart *p,
outline_color->setSizeAdjustPolicy(QComboBox::AdjustToContents);
filling_color->setSizeAdjustPolicy(QComboBox::AdjustToContents);
auto grid_layout = new QGridLayout(this);
auto grid_layout = new QGridLayout();
grid_layout->addWidget(new QLabel(tr("Contour :")), 0,0, Qt::AlignRight);
grid_layout->addWidget(outline_color, 0, 1);
grid_layout->addWidget(new QLabel(tr("Remplissage :")), 1, 0, Qt::AlignRight);
+1
View File
@@ -112,6 +112,7 @@ ExportDialog::ExportDialog(
*/
ExportDialog::~ExportDialog()
{
qDeleteAll(diagram_lines_);
}
/**
+4 -2
View File
@@ -321,9 +321,11 @@ QTreeWidgetItem *GenericPanel::getItemForDiagram(Diagram *diagram,
if (created) *created = false;
return(diagram_qtwi);
}
if (!created) return(nullptr);
diagram_qtwi = makeItem(QET::Diagram);
if (created) *created = true;
*created = true;
return(diagram_qtwi);
}