util: fix mem leak of program path

Fixes: 759b940389 ("util: Get program name based on path when possible")
Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:
Eric Engestrom 2019-07-07 11:40:04 +01:00
parent 991137144a
commit 5b10ddf358
1 changed files with 12 additions and 7 deletions

View File

@ -33,6 +33,15 @@
#undef GET_PROGRAM_NAME #undef GET_PROGRAM_NAME
#if defined(__linux__) && defined(HAVE_PROGRAM_INVOCATION_NAME) #if defined(__linux__) && defined(HAVE_PROGRAM_INVOCATION_NAME)
static char *path = NULL;
static void __freeProgramPath()
{
free(path);
path = NULL;
}
static const char * static const char *
__getProgramName() __getProgramName()
{ {
@ -45,14 +54,10 @@ __getProgramName()
* Strip these arguments out by using the realpath only if it was * Strip these arguments out by using the realpath only if it was
* a prefix of the invocation name. * a prefix of the invocation name.
*/ */
static char *path; if (!path) {
if (!path)
/* Note: realpath() allocates memory that we will keep around for
* the lifetime of the app, and then leak as the app closes.
* FIXME: we should find a way to clean this properly
*/
path = realpath("/proc/self/exe", NULL); path = realpath("/proc/self/exe", NULL);
atexit(__freeProgramPath);
}
if (path && strncmp(path, program_invocation_name, strlen(path)) == 0) { if (path && strncmp(path, program_invocation_name, strlen(path)) == 0) {
/* This shouldn't be null because path is a a prefix, /* This shouldn't be null because path is a a prefix,