From d22815f2085263878a6a2cae6654719689f53814 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 24 Feb 2020 11:17:19 +0100 Subject: [PATCH] QmlDesigner: Avoid potential double-free in FormEditorAnnotationIcon You need a QPointer here to avoid potential double-free. A normal pointer is not reset to nullptr when the widget gets cleaned via the widget tree, so if (widget) widget->deleteLater() does not work with a normal pointer. Change-Id: I18460c44414ff2ee90d8afe3a857d5902d69f911 Reviewed-by: Thomas Hartmann --- .../components/formeditor/formeditorannotationicon.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorannotationicon.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorannotationicon.cpp index 20e2a1dfe6c..7bd4573aafc 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorannotationicon.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorannotationicon.cpp @@ -407,14 +407,15 @@ void FormEditorAnnotationIcon::removeAnnotationDialog() if (!m_customId.isNull()) { dialogTitle = m_customId; } - QMessageBox *deleteDialog = new QMessageBox(Core::ICore::dialogParent()); + QPointer deleteDialog = new QMessageBox(Core::ICore::dialogParent()); deleteDialog->setWindowTitle(dialogTitle); deleteDialog->setText(tr("Delete this annotation?")); deleteDialog->setStandardButtons(QMessageBox::Yes | QMessageBox::No); deleteDialog->setDefaultButton(QMessageBox::Yes); int result = deleteDialog->exec(); - if (deleteDialog) deleteDialog->deleteLater(); + if (deleteDialog) + deleteDialog->deleteLater(); if (result == QMessageBox::Yes) { m_modelNode.removeCustomId();