From 3c22c7682132c7d9f574174f08b5f4da23ccecb1 Mon Sep 17 00:00:00 2001 From: Bryan Tan Date: Tue, 23 Feb 2021 15:05:53 -0800 Subject: [PATCH] Fix toolbar icon double free in customize dialog's destructor --- .../toolbarCustomize/ToolbarCustomizeDialog.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gui/dialog/toolbarCustomize/ToolbarCustomizeDialog.cpp b/src/gui/dialog/toolbarCustomize/ToolbarCustomizeDialog.cpp index 6b199dac..32f7879d 100644 --- a/src/gui/dialog/toolbarCustomize/ToolbarCustomizeDialog.cpp +++ b/src/gui/dialog/toolbarCustomize/ToolbarCustomizeDialog.cpp @@ -80,7 +80,10 @@ ToolbarCustomizeDialog::~ToolbarCustomizeDialog() { // We can only delete this list at the end, it would be better to delete this list // after a refresh and after drag_end is called... for (ToolItemDragData* data: this->itemDatalist) { - g_object_unref(data->icon); + if (data->icon != nullptr) { + g_object_unref(data->icon); + } + g_object_unref(data->ebox); g_free(data); } } @@ -115,8 +118,9 @@ void ToolbarCustomizeDialog::toolitemDragDataGetSeparator(GtkWidget* widget, Gdk */ void ToolbarCustomizeDialog::toolitemDragBegin(GtkWidget* widget, GdkDragContext* context, ToolItemDragData* data) { ToolItemDragCurrentData::setData(TOOL_ITEM_ITEM, -1, data->item); - - gtk_drag_set_icon_pixbuf(context, data->icon, -2, -2); + if (data->icon) { + gtk_drag_set_icon_pixbuf(context, data->icon, -2, -2); + } gtk_widget_hide(data->ebox); } @@ -272,7 +276,9 @@ void ToolbarCustomizeDialog::rebuildIconview() { data->dlg = this; data->icon = ToolbarDragDropHelper::getImagePixbuf(GTK_IMAGE(icon)); data->item = item; + // store reference to ebox data->ebox = ebox; + g_object_ref(ebox); this->itemDatalist.push_front(data);