From: Tomas Mraz Date: Fri, 11 Mar 2011 17:25:47 +0000 (+0100) Subject: Fixed leaking of env and members of entry in replace_cmd(). X-Git-Tag: cronie1.4.7~6 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a40d0cefb5ccad5d5b9f443e4c702e2b36c666db;p=cronie Fixed leaking of env and members of entry in replace_cmd(). --- diff --git a/src/crontab.c b/src/crontab.c index f6a5e51..a5fc8df 100644 --- a/src/crontab.c +++ b/src/crontab.c @@ -695,13 +695,9 @@ static int replace_cmd(void) { int error = 0; entry *e; uid_t file_owner; - char **envp = env_init(); + char **envp; char *safename; - if (envp == NULL) { - fprintf(stderr, "%s: Cannot allocate memory.\n", ProgramName); - return (-2); - } safename = host_specific_filename("tmp.XXXXXXXXXX", 1); if (!safename || !glue_strings(TempFilename, sizeof TempFilename, SPOOL_DIR, @@ -770,6 +766,15 @@ static int replace_cmd(void) { Set_LineNum(1 - NHEADER_LINES) CheckErrorCount = 0; eof = FALSE; + + envp = env_init(); + if (envp == NULL) { + fprintf(stderr, "%s: Cannot allocate memory.\n", ProgramName); + fclose(tmp); + error = -2; + goto done; + } + while (!CheckErrorCount && !eof) { switch (load_env(envstr, tmp)) { case ERR: @@ -783,12 +788,13 @@ static int replace_cmd(void) { case FALSE: e = load_entry(tmp, check_error, pw, envp); if (e) - free(e); + free_entry(e); break; case TRUE: break; } } + env_free(envp); if (CheckErrorCount != 0) { fprintf(stderr, "errors in crontab file, can't install.\n");