gplugin/gplugin

Fix leak cleaning up file tree.
develop/asan
2019-01-31, Elliott Sales de Andrade
a164b787bc7d
Parents 22f41c3207e2
Children dfc5a2328fce
Fix leak cleaning up file tree.

The root node *never* has ->data set to anything, so freeing the tree never
occurs.
--- a/gplugin/gplugin-file-tree.c Thu Jan 31 21:59:00 2019 -0500
+++ b/gplugin/gplugin-file-tree.c Thu Jan 31 22:01:38 2019 -0500
@@ -60,10 +60,12 @@
* Helpers
*****************************************************************************/
static gboolean
-gplugin_file_tree_free_leaves(GNode *n, G_GNUC_UNUSED gpointer d) {
+gplugin_file_tree_free_leaves(GNode *n, gpointer d) {
+ GNode *root = d;
GPluginFileTreeEntry *e = n->data;
- gplugin_file_tree_entry_free(e);
+ if (n != root)
+ gplugin_file_tree_entry_free(e);
return FALSE;
}
@@ -144,12 +146,10 @@
gplugin_file_tree_free(GNode *root) {
g_return_if_fail(root);
- if(root->data) {
- g_node_traverse(root, G_POST_ORDER, G_TRAVERSE_LEAVES, -1,
- gplugin_file_tree_free_leaves, NULL);
- g_node_traverse(root, G_POST_ORDER, G_TRAVERSE_NON_LEAVES, -1,
- gplugin_file_tree_free_non_leaves, NULL);
- }
+ g_node_traverse(root, G_POST_ORDER, G_TRAVERSE_LEAVES, -1,
+ gplugin_file_tree_free_leaves, root);
+ g_node_traverse(root, G_POST_ORDER, G_TRAVERSE_NON_LEAVES, -1,
+ gplugin_file_tree_free_non_leaves, NULL);
g_node_destroy(root);
}