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
This commit is contained in:
Tanu Kaskinen 2017-12-07 01:26:29 +02:00
parent c8bd93c5a7
commit e5588e08a1

View file

@ -137,10 +137,13 @@ static char * find_desktop_file_in_dir(struct rule *r, const char *desktop_file_
pa_assert(st); pa_assert(st);
fn = pa_sprintf_malloc("%s" PA_PATH_SEP "%s.desktop", desktop_file_dir, r->process_name); 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; return fn;
} else {
pa_xfree(fn);
#ifdef DT_DIR #ifdef DT_DIR
{
DIR *desktopfiles_dir; DIR *desktopfiles_dir;
struct dirent *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, "..")) || pa_streq(dir->d_name, ".."))
continue; 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); 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) { if (stat(fn, st) == 0) {
closedir(desktopfiles_dir); closedir(desktopfiles_dir);
return fn; return fn;
} }
pa_xfree(fn);
} }
closedir(desktopfiles_dir); closedir(desktopfiles_dir);
} }
#endif
} }
#endif
return NULL; return NULL;
} }