From b00c6d7fb5798b4e528554e1221a553ab95506ed Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 5 Jan 2010 18:18:55 -0500 Subject: [PATCH] Fix a memleak An early exit in expand_application_parameters forgot to free a GString. Reported by Steve Grubb. --- gio/gdesktopappinfo.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/gio/gdesktopappinfo.c b/gio/gdesktopappinfo.c index efe56e3c3..e7f214b1e 100644 --- a/gio/gdesktopappinfo.c +++ b/gio/gdesktopappinfo.c @@ -716,16 +716,18 @@ expand_application_parameters (GDesktopAppInfo *info, { GList *uri_list = *uris; const char *p = info->exec; - GString *expanded_exec = g_string_new (NULL); + GString *expanded_exec; gboolean res; - + if (info->exec == NULL) { g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Desktop file didn't specify Exec field")); return FALSE; } - + + expanded_exec = g_string_new (NULL); + while (*p) { if (p[0] == '%' && p[1] != '\0') @@ -735,10 +737,10 @@ expand_application_parameters (GDesktopAppInfo *info, } else g_string_append_c (expanded_exec, *p); - + p++; } - + /* No file substitutions */ if (uri_list == *uris && uri_list != NULL) { @@ -746,7 +748,7 @@ expand_application_parameters (GDesktopAppInfo *info, g_string_append_c (expanded_exec, ' '); expand_macro ('f', expanded_exec, info, uris); } - + res = g_shell_parse_argv (expanded_exec->str, argc, argv, error); g_string_free (expanded_exec, TRUE); return res;