diff --git a/require-ess/src/require.c b/require-ess/src/require.c
index 879edb56a61bae1de8b8d4a109fc5ec3abfef8b7..2803e9296e0deb18fd6c215890c0a65c9b57b6b4 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 = {