]> granicus.if.org Git - graphviz/commitdiff
prune: fix memory leaks in list destruction
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Tue, 6 Dec 2022 15:23:21 +0000 (07:23 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Thu, 8 Dec 2022 03:34:43 +0000 (19:34 -0800)
This problem seems to have existed since the first Graphviz commit.

contrib/prune/prune.c

index efe77ffde429c2d9008e97e18dbf884779e3628b..4f0b20856599a701558f2acbbd0f69700cc0db07 100644 (file)
@@ -26,6 +26,11 @@ typedef struct {
     char *v;
 } strattr_t;
 
+static void free_strattr(strattr_t s) {
+  free(s.n);
+  free(s.v);
+}
+
 DEFINE_LIST(attrs, strattr_t)
 DEFINE_LIST(nodes, char*)
 
@@ -79,8 +84,8 @@ int main(int argc, char **argv)
        progname++;             /* character after last '/' */
     }
 
-    attrs_t attr_list = {0};
-    nodes_t node_list = {0};
+    attrs_t attr_list = {.dtor = free_strattr};
+    nodes_t node_list = {.dtor = (void(*)(char*))free};
 
     while ((c = getopt(argc, argv, "hvn:N:")) != -1) {
        switch (c) {