From fd05d245b05f887718b0327f6707ff038e3022f5 Mon Sep 17 00:00:00 2001 From: "Lucas A. M. Magalhaes" <lucas.magalhaes@ess.eu> Date: Wed, 10 May 2023 11:18:28 +0200 Subject: [PATCH] Fix memory leak in require_priv --- require-ess/src/require.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/require-ess/src/require.c b/require-ess/src/require.c index 879edb56..2803e929 100644 --- a/require-ess/src/require.c +++ b/require-ess/src/require.c @@ -895,6 +895,7 @@ static int require_priv( const char *versionstr /* "-<version>" or "" (for old style only */ ) { int status; + int returnvalue = 0; const char *loaded = NULL; const char *found = NULL; HMODULE libhandle; @@ -1138,6 +1139,7 @@ static int require_priv( else fprintf(stderr, "Module %s%s%s not available\n", module, version ? " version " : "", version ? version : ""); + if (founddir) free(founddir); return ifexists ? 0 : -1; } @@ -1207,7 +1209,8 @@ static int require_priv( fprintf(stderr, "Requested %s version %s not available, found only %s.\n", module, version, found); - return -1; + returnvalue = -1; + goto require_priv_error; } /* load dbd file */ @@ -1227,7 +1230,8 @@ static int require_priv( printf("Loading dbd file %s\n", filename); if (dbLoadDatabase(filename, NULL, NULL) != 0) { fprintf(stderr, "Error loading %s\n", filename); - return -1; + returnvalue = -1; + goto require_priv_error; } /* when dbd is loaded call register function */ @@ -1263,12 +1267,18 @@ static int require_priv( putenvprintf("TEMPLATES=%s", globalTemplates); } + if (founddir) free(founddir); + /* no need to execute startup script twice if not with new arguments */ if (loaded && args == NULL) { return 0; } return status; + +require_priv_error: + if (founddir) free(founddir); + return returnvalue; } static const iocshFuncDef requireDef = { -- GitLab