summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <pwithnall@endlessos.org>2023-01-05 17:13:35 +0000
committerPhilip Withnall <pwithnall@endlessos.org>2023-01-05 17:13:35 +0000
commitdb2381026f9cedd7414973706eabe3c228964b1d (patch)
tree07d69711632887fcbe5815a8926f511fa9496ddc
parenta7d523cd08efef940175c56d5a548843fe86b3f3 (diff)
downloadglib-db2381026f9cedd7414973706eabe3c228964b1d.tar.gz
gutils: Avoid possible leaks in g_find_program_for_path()
Signed-off-by: Philip Withnall <pwithnall@endlessos.org> Fixes: #2871
-rw-r--r--glib/gutils.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/glib/gutils.c b/glib/gutils.c
index d73b6474b..dce7cbee5 100644
--- a/glib/gutils.c
+++ b/glib/gutils.c
@@ -348,14 +348,18 @@ g_find_program_for_path (const char *program,
!g_file_test (program, G_FILE_TEST_IS_DIR))
{
gchar *out = NULL;
- char *cwd;
if (g_path_is_absolute (program))
- return g_strdup (program);
+ {
+ out = g_strdup (program);
+ }
+ else
+ {
+ char *cwd = g_get_current_dir ();
+ out = g_build_filename (cwd, program, NULL);
+ g_free (cwd);
+ }
- cwd = g_get_current_dir ();
- out = g_build_filename (cwd, program, NULL);
- g_free (cwd);
g_free (program_path);
return g_steal_pointer (&out);
@@ -499,6 +503,8 @@ g_find_program_for_path (const char *program,
ret = g_build_filename (cwd, startp, NULL);
g_free (cwd);
}
+
+ g_free (program_path);
g_free (startp_path);
g_free (freeme);
#ifdef G_OS_WIN32
@@ -510,7 +516,8 @@ g_find_program_for_path (const char *program,
g_free (startp_path);
}
while (*p++ != '\0');
-
+
+ g_free (program_path);
g_free (freeme);
#ifdef G_OS_WIN32
g_free ((gchar *) path_copy);