From: Andreas Schneider Date: Mon, 12 Nov 2018 14:31:09 +0000 (+0100) Subject: lib:replace: Do not leak the file pointer in rep_getprogname() X-Git-Tag: tdb-1.3.17~799 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a9d003d01adebaf089ca975b04b9d8d4e7640a2;p=thirdparty%2Fsamba.git lib:replace: Do not leak the file pointer in rep_getprogname() And return NULL on error. Signed-off-by: Andreas Schneider Reviewed-by: Ralph Boehme --- diff --git a/lib/replace/replace.c b/lib/replace/replace.c index e38df98ea3a..9b1df3dc3bd 100644 --- a/lib/replace/replace.c +++ b/lib/replace/replace.c @@ -996,6 +996,7 @@ const char *rep_getprogname(void) pid_t pid; size_t nread; int len; + int rc; if (rep_progname[0] != '\0') { return rep_progname; @@ -1003,12 +1004,12 @@ const char *rep_getprogname(void) len = snprintf(rep_progname, sizeof(rep_progname), "%s", ""); if (len <= 0) { - return ""; + return NULL; } pid = getpid(); if (pid <= 1 || pid == (pid_t)-1) { - return rep_progname; + return NULL; } len = snprintf(cmdline, @@ -1016,17 +1017,23 @@ const char *rep_getprogname(void) "/proc/%u/cmdline", (unsigned int)pid); if (len <= 0 || len == sizeof(cmdline)) { - return rep_progname; + return NULL; } fp = fopen(cmdline, "r"); if (fp == NULL) { - return rep_progname; + return NULL; } nread = fread(cmdline, 1, sizeof(cmdline) - 1, fp); + + rc = fclose(fp); + if (rc != 0) { + return NULL; + } + if (nread == 0) { - return rep_progname; + return NULL; } cmdline[nread] = '\0';