Fix memory leaks after gtk_tree_selection_get_selected_rows()
authorArkadiy Illarionov <[email protected]>
Thu, 13 Mar 2025 21:02:14 +0000 (00:02 +0300)
committerColin Clark <[email protected]>
Fri, 14 Mar 2025 10:15:51 +0000 (10:15 +0000)
src/dupe.cc
src/view-file/view-file-list.cc

index c1a3ea4bd16e21c6a34b0a0afbfa403145e03bc5..d732d848228d2bc5340137176545afff3bda5b08 100644 (file)
@@ -5195,6 +5195,7 @@ static void export_duplicates_data_save_cb(FileDialog *fdlg, gpointer data)
 
                work = work->next;
                }
+       g_list_free_full(slist, reinterpret_cast<GDestroyNotify>(gtk_tree_path_free));
 
        g_output_stream_write(G_OUTPUT_STREAM(gfstream), output_string->str, output_string->len, nullptr, &error);
 
index 5a0cef1865491c4c0ab04459c713b5f402847f1b..bce53fbb6807cd57c3469d4725fa1dd342a4ecdf 100644 (file)
@@ -1382,7 +1382,8 @@ void vflist_selection_foreach(ViewFile *vf, const ViewFile::SelectionCallback &f
        GtkTreeIter iter;
        FileData *fd_n;
 
-       for (GList *work = gtk_tree_selection_get_selected_rows(selection, &store); work; work = work->next)
+       GList *slist = gtk_tree_selection_get_selected_rows(selection, &store);
+       for (GList *work = slist; work; work = work->next)
                {
                auto *tpath = static_cast<GtkTreePath *>(work->data);
 
@@ -1391,6 +1392,7 @@ void vflist_selection_foreach(ViewFile *vf, const ViewFile::SelectionCallback &f
 
                func(fd_n);
                }
+       g_list_free_full(slist, reinterpret_cast<GDestroyNotify>(gtk_tree_path_free));
 }
 
 void vflist_select_all(ViewFile *vf)