Fix CID 1491070: resource leak. Use a static GString to feed cmd.mailto
authorwwp <subscript@free.fr>
Sun, 12 Sep 2021 11:40:06 +0000 (13:40 +0200)
committerwwp <subscript@free.fr>
Sun, 12 Sep 2021 11:41:52 +0000 (13:41 +0200)
instead of a dynamically allocated struct that will never be freed.

src/main.c

index 2baaf8f11ef5e4d2d4b3763d1f459c37c1016cd0..97acdc2e4909bb84d4516c00296d3d9f77d0e123 100644 (file)
@@ -1837,10 +1837,9 @@ static void exit_claws(MainWindow *mainwin)
                exit(1);        \
        }
 
-static GString * parse_cmd_compose_from_file(const gchar *fn)
+static void parse_cmd_compose_from_file(const gchar *fn, GString *body)
 {
        GString *headers = g_string_new(NULL);
-       GString *body = g_string_new(NULL);
        gchar *to = NULL;
        gchar *h;
        gchar *v;
@@ -1897,8 +1896,6 @@ static GString * parse_cmd_compose_from_file(const gchar *fn)
        /* append the remaining headers */
        g_string_append(body, headers->str);
        g_string_free(headers, TRUE);
-
-       return body;
 }
 
 #undef G_PRINT_EXIT
@@ -1915,6 +1912,8 @@ static void parse_cmd_opt_error(char *errstr, char* optstr)
        exit(1);
 }
 
+static GString mailto; /* used to feed cmd.compose_mailto when --compose-from-file is used */
+
 static void parse_cmd_opt(int argc, char *argv[])
 {
        AttachInfo *ainfo;
@@ -1933,9 +1932,9 @@ static void parse_cmd_opt(int argc, char *argv[])
                    if (i+1 < argc) {
                                const gchar *p = argv[i+1];
 
-                               GString *mailto = parse_cmd_compose_from_file(p);
+                               parse_cmd_compose_from_file(p, &mailto);
                                cmd.compose = TRUE;
-                               cmd.compose_mailto = mailto->str;
+                               cmd.compose_mailto = mailto.str;
                                i++;
                    } else {
                 parse_cmd_opt_error(_("Missing file argument for option %s"), argv[i]);