Blame SOURCES/0001-Address-issues-found-by-coverity-scan.patch

d1615c
From 09afe49c73cb495f32b96dce32728352c46ba865 Mon Sep 17 00:00:00 2001
d1615c
From: =?UTF-8?q?Jan=20Stan=C4=9Bk?= <jstanek@redhat.com>
d1615c
Date: Thu, 29 Apr 2021 16:03:05 +0200
d1615c
Subject: [PATCH] Address issues found by coverity scan
d1615c
MIME-Version: 1.0
d1615c
Content-Type: text/plain; charset=UTF-8
d1615c
Content-Transfer-Encoding: 8bit
d1615c
d1615c
Signed-off-by: Jan Staněk <jstanek@redhat.com>
d1615c
---
d1615c
 anacron/main.c   | 8 ++++++--
d1615c
 anacron/runjob.c | 2 ++
d1615c
 src/crontab.c    | 1 +
d1615c
 src/database.c   | 3 ++-
d1615c
 src/pw_dup.c     | 1 +
d1615c
 5 files changed, 12 insertions(+), 3 deletions(-)
d1615c
d1615c
diff --git a/anacron/main.c b/anacron/main.c
d1615c
index d092970..65f8fed 100644
d1615c
--- a/anacron/main.c
d1615c
+++ b/anacron/main.c
d1615c
@@ -44,8 +44,8 @@ int day_now;
d1615c
 int year, month, day_of_month;                 /* date anacron started */
d1615c
 
d1615c
 char *program_name;
d1615c
-char *anacrontab;
d1615c
-char *spooldir;
d1615c
+char *anacrontab = NULL;
d1615c
+char *spooldir = NULL;
d1615c
 int serialize, force, update_only, now,
d1615c
     no_daemon, quiet, testing_only;            /* command-line options */
d1615c
 char **job_args;                       	       /* vector of "job" command-line arguments */
d1615c
@@ -128,12 +128,14 @@ parse_opts(int argc, char *argv[])
d1615c
 	    quiet = 1;
d1615c
 	    break;
d1615c
 	case 't':
d1615c
+	    free(anacrontab);
d1615c
 	    anacrontab = strdup(optarg);
d1615c
 	    break;
d1615c
 	case 'T':
d1615c
 	    testing_only = 1;
d1615c
 	    break;
d1615c
 	case 'S':
d1615c
+	    free(spooldir);
d1615c
 	    spooldir = strdup(optarg);
d1615c
 	    break;
d1615c
 	case 'V':
d1615c
@@ -208,9 +210,11 @@ go_background(void)
d1615c
     /* stdin is already closed */
d1615c
 
d1615c
     if (fclose(stdout)) die_e("Can't close stdout");
d1615c
+    /* coverity[leaked_handle] – fd 1 closed automatically */
d1615c
     xopen(1, "/dev/null", O_WRONLY);
d1615c
 
d1615c
     if (fclose(stderr)) die_e("Can't close stderr");
d1615c
+    /* coverity[leaked_handle] – fd 2 closed automatically */
d1615c
     xopen(2, "/dev/null", O_WRONLY);
d1615c
 
d1615c
     pid = xfork();
d1615c
diff --git a/anacron/runjob.c b/anacron/runjob.c
d1615c
index 341351f..04d6904 100644
d1615c
--- a/anacron/runjob.c
d1615c
+++ b/anacron/runjob.c
d1615c
@@ -237,7 +237,9 @@ launch_mailer(job_rec *jr)
d1615c
 	xcloselog();
d1615c
 
d1615c
 	/* Ensure stdout/stderr are sane before exec-ing sendmail */
d1615c
+	/* coverity[leaked_handle] – STDOUT closed automatically */
d1615c
 	xclose(STDOUT_FILENO); xopen(STDOUT_FILENO, "/dev/null", O_WRONLY);
d1615c
+	/* coverity[leaked_handle] – STDERR closed automatically */
d1615c
 	xclose(STDERR_FILENO); xopen(STDERR_FILENO, "/dev/null", O_WRONLY);
d1615c
 	xclose(jr->output_fd);
d1615c
 
d1615c
diff --git a/src/crontab.c b/src/crontab.c
d1615c
index 240c112..41c8984 100644
d1615c
--- a/src/crontab.c
d1615c
+++ b/src/crontab.c
d1615c
@@ -872,6 +872,7 @@ static int replace_cmd(void) {
d1615c
 
d1615c
 	if ((error = check_syntax(tmp)) < 0) {
d1615c
 		fprintf(stderr, "Invalid crontab file, can't install.\n");
d1615c
+		fclose(tmp);
d1615c
 		goto done;
d1615c
 	}
d1615c
 
d1615c
diff --git a/src/database.c b/src/database.c
d1615c
index c1e4593..bff0256 100644
d1615c
--- a/src/database.c
d1615c
+++ b/src/database.c
d1615c
@@ -559,7 +559,8 @@ int load_database(cron_db * old_db) {
d1615c
 			if (not_a_crontab(dp))
d1615c
 				continue;
d1615c
 
d1615c
-			strncpy(fname, dp->d_name, NAME_MAX + 1);
d1615c
+			strncpy(fname, dp->d_name, NAME_MAX);
d1615c
+			fname[NAME_MAX] = '\0';
d1615c
 
d1615c
 			if (!glue_strings(tabname, sizeof tabname, SPOOL_DIR, fname, '/'))
d1615c
 				continue;	/* XXX log? */
d1615c
diff --git a/src/pw_dup.c b/src/pw_dup.c
d1615c
index ea787cd..c6f7b00 100644
d1615c
--- a/src/pw_dup.c
d1615c
+++ b/src/pw_dup.c
d1615c
@@ -121,6 +121,7 @@ pw_dup(const struct passwd *pw) {
d1615c
 		cp += ssize;
d1615c
 	}
d1615c
 
d1615c
+	/* cppcheck-suppress[memleak symbolName=cp] memory originally pointed to by cp returned via newpw */
d1615c
 	return (newpw);
d1615c
 }
d1615c
 
d1615c
-- 
d1615c
2.31.1
d1615c