summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTanu Kaskinen <tanuk@iki.fi>2017-12-07 01:26:29 +0200
committerTanu Kaskinen <tanuk@iki.fi>2017-12-08 08:47:10 +0200
commite5588e08a132f0c82efc6b4e53889900e1ed5035 (patch)
treee34464baa15302088a31fbb3305c5d1112ab4fda
parentc8bd93c5a764940abd280901a2b56af18ece24b0 (diff)
downloadpulseaudio-e5588e08a132f0c82efc6b4e53889900e1ed5035.tar.gz
augment-properties: fix a memory leak
If the desktop file is not found, fn was not being freed after the last loop iteration. CID: 1462477
-rw-r--r--src/modules/module-augment-properties.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/modules/module-augment-properties.c b/src/modules/module-augment-properties.c
index f0584328d..3eb503aa0 100644
--- a/src/modules/module-augment-properties.c
+++ b/src/modules/module-augment-properties.c
@@ -137,10 +137,13 @@ static char * find_desktop_file_in_dir(struct rule *r, const char *desktop_file_
pa_assert(st);
fn = pa_sprintf_malloc("%s" PA_PATH_SEP "%s.desktop", desktop_file_dir, r->process_name);
- if (stat(fn, st) == 0) {
+ if (stat(fn, st) == 0)
return fn;
- } else {
+
+ pa_xfree(fn);
+
#ifdef DT_DIR
+ {
DIR *desktopfiles_dir;
struct dirent *dir;
@@ -152,18 +155,20 @@ static char * find_desktop_file_in_dir(struct rule *r, const char *desktop_file_
|| pa_streq(dir->d_name, ".."))
continue;
- pa_xfree(fn);
fn = pa_sprintf_malloc("%s" PA_PATH_SEP "%s" PA_PATH_SEP "%s.desktop", desktop_file_dir, dir->d_name, r->process_name);
if (stat(fn, st) == 0) {
closedir(desktopfiles_dir);
return fn;
}
+
+ pa_xfree(fn);
}
closedir(desktopfiles_dir);
}
-#endif
}
+#endif
+
return NULL;
}