Blob Blame History Raw
From 753d98b3e70f34a52caabbe8db30bf06fc917f38 Mon Sep 17 00:00:00 2001
From: Rob Crittenden <rcritten@redhat.com>
Date: Thu, 13 Sep 2018 11:46:51 -0400
Subject: [PATCH 14/17] clang: Null pointer passed as an argument to a
 'nonnull' parameter

---
 src/certsave-n.c | 3 ++-
 src/getcert.c    | 7 ++++---
 src/scep.c       | 8 ++++----
 src/submit-sn.c  | 7 +++++--
 4 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/certsave-n.c b/src/certsave-n.c
index 49b28324..972a1dfa 100644
--- a/src/certsave-n.c
+++ b/src/certsave-n.c
@@ -72,7 +72,8 @@ add_privkey_to_list(SECKEYPrivateKey **list, SECKEYPrivateKey *key)
 		if ((list == NULL) || (list[i] == NULL)) {
 			newlist = malloc(sizeof(newlist[0]) * (i + 2));
 			if (newlist != NULL) {
-				memcpy(newlist, list, sizeof(newlist[0]) * i);
+				if (list != NULL)
+					memcpy(newlist, list, sizeof(newlist[0]) * i);
 				newlist[i] = key;
 				newlist[i + 1] = NULL;
 				list = newlist;
diff --git a/src/getcert.c b/src/getcert.c
index 6417cd44..ddb28de2 100644
--- a/src/getcert.c
+++ b/src/getcert.c
@@ -291,7 +291,8 @@ add_string(void *parent, char ***dest, const char *value)
 		printf(_("Out of memory.\n"));
 		exit(1);
 	}
-	memcpy(tmp, *dest, sizeof(tmp[0]) * i);
+	if (*dest)
+		memcpy(tmp, *dest, sizeof(tmp[0]) * i);
 	tmp[i] = talloc_strdup(tmp, value);
 	i++;
 	tmp[i] = NULL;
@@ -1582,8 +1583,8 @@ add_basic_request(enum cm_tdbus_type bus, char *id,
 {
 	DBusMessage *req, *rep;
 	int i;
-	struct cm_tdbusm_dict param[28];
-	const struct cm_tdbusm_dict *params[29];
+	struct cm_tdbusm_dict param[30];
+	const struct cm_tdbusm_dict *params[30];
 	dbus_bool_t b;
 	const char *capath;
 	char *p;
diff --git a/src/scep.c b/src/scep.c
index 68eae788..b0bd214b 100644
--- a/src/scep.c
+++ b/src/scep.c
@@ -793,8 +793,8 @@ main(int argc, const char **argv)
 				fprintf(stderr, "code_text = \"%s\"\n", cm_submit_h_result_code_text(hctx));
 				syslog(LOG_DEBUG, "%s %s?%s\n", "GET", url, params2);
 			}
-			if (strcasecmp(content_type2,
-				       "application/x-x509-ca-cert") != 0) {
+			if ((content_type2 != NULL) && (strcasecmp(content_type2,
+				       "application/x-x509-ca-cert") != 0)) {
 				if (verbose > 0) {
 					fprintf(stderr, "Content is not "
 						"\"application/x-x509-ca-cert\""
@@ -882,8 +882,8 @@ main(int argc, const char **argv)
 		break;
 	case op_get_cert_initial:
 	case op_pkcsreq:
-		if (strcasecmp(content_type2,
-			       "application/x-pki-message") == 0) {
+		if ((content_type2 != NULL) && (strcasecmp(content_type2,
+			       "application/x-pki-message") == 0)) {
 			memset(&cacerts, 0, sizeof(cacerts));
 			cacerts[0] = cacert ? cacert : racert;
 			cacerts[1] = cacert ? racert : NULL;
diff --git a/src/submit-sn.c b/src/submit-sn.c
index e9c62b22..ecd78dc0 100644
--- a/src/submit-sn.c
+++ b/src/submit-sn.c
@@ -258,8 +258,11 @@ cm_submit_sn_main(int fd, struct cm_store_ca *ca, struct cm_store_entry *entry,
 	/* Allocate space for one more extension. */
 	extensions = PORT_ArenaZAlloc(arena, (i + 2) * sizeof(extensions[0]));
 	if (extensions != NULL) {
-		memcpy(extensions, ucert->extensions,
-		       i * sizeof(extensions[0]));
+		if (i != 0) {
+			/* Note that C99 says copy of 0 items is ok, quieting clang */
+			memcpy(extensions, ucert->extensions,
+			       i * sizeof(extensions[0]));
+		}
 		if (found_basic) {
 			extensions[i] = NULL;
 		} else {
-- 
2.14.4