Blame SOURCES/0019-clang-more-Memory-leaks.patch

9890c6
From 0dc90f1783981ac11c3c067c40df88d6315911a6 Mon Sep 17 00:00:00 2001
d4b2f2
From: Rob Crittenden <rcritten@redhat.com>
d4b2f2
Date: Mon, 8 Oct 2018 12:53:57 -0400
9890c6
Subject: [PATCH 19/25] clang: more Memory leaks
d4b2f2
d4b2f2
Fix leaks in tests/tools/addcinfo.c, dogtag.c and submit-x.c
d4b2f2
---
d4b2f2
 src/dogtag.c           | 17 +++++++++++++----
d4b2f2
 src/getcert.c          |  3 ++-
d4b2f2
 src/store-files.c      |  1 +
d4b2f2
 src/submit-d.c         |  6 ++++++
d4b2f2
 src/submit-x.c         | 39 ++++++++++-----------------------------
d4b2f2
 tests/tools/addcinfo.c |  8 +++++---
d4b2f2
 6 files changed, 37 insertions(+), 37 deletions(-)
d4b2f2
d4b2f2
diff --git a/src/dogtag.c b/src/dogtag.c
d4b2f2
index 55607f3d..8e3890a5 100644
d4b2f2
--- a/src/dogtag.c
d4b2f2
+++ b/src/dogtag.c
d4b2f2
@@ -117,7 +117,7 @@ main(int argc, const char **argv)
d4b2f2
 	const char *ssldir = NULL, *cainfo = NULL, *capath = NULL;
d4b2f2
 	const char *sslcert = NULL, *sslkey = NULL;
d4b2f2
 	const char *sslpin = NULL, *sslpinfile = NULL;
d4b2f2
-	const char *csr = NULL, *serial = NULL, *template = NULL;
d4b2f2
+	const char *csr = NULL, *csre = NULL, *serial = NULL, *template = NULL;
d4b2f2
 	const char *uid = NULL, *pwd = NULL, *pwdfile = NULL;
d4b2f2
 	const char *udn = NULL, *pin = NULL, *pinfile = NULL;
d4b2f2
 	char *poptarg;
d4b2f2
@@ -127,7 +127,7 @@ main(int argc, const char **argv)
d4b2f2
 	} *aoptions = NULL, *soptions = NULL;
d4b2f2
 	size_t num_aoptions = 0, num_soptions = 0, j;
d4b2f2
 	char *savedstate = NULL;
d4b2f2
-	char *p, *q, *params = NULL, *params2 = NULL;
d4b2f2
+	char *p = NULL, *q = NULL, *params = NULL, *params2 = NULL;
d4b2f2
 	const char *lasturl = NULL, *lastparams = NULL;
d4b2f2
 	const char *tmp = NULL, *results = NULL;
d4b2f2
 	struct cm_submit_h_context *hctx;
d4b2f2
@@ -537,16 +537,19 @@ main(int argc, const char **argv)
d4b2f2
 				}
d4b2f2
 				poptPrintUsage(pctx, stdout, 0);
d4b2f2
 				free(csr);
d4b2f2
+				free(p);
d4b2f2
 				return CM_SUBMIT_STATUS_UNCONFIGURED;
d4b2f2
 			}
d4b2f2
-			csr = cm_submit_u_url_encode(csr);
d4b2f2
+			csre = cm_submit_u_url_encode(csr);
d4b2f2
 			params = talloc_asprintf(ctx,
d4b2f2
 						 "profileId=%s&"
d4b2f2
 						 "cert_request_type=pkcs10&"
d4b2f2
 						 "cert_request=%s&"
d4b2f2
 						 "xml=true",
d4b2f2
 						 template,
d4b2f2
-						 csr);
d4b2f2
+						 csre);
d4b2f2
+			free(csr);
d4b2f2
+			free(csre);
d4b2f2
 		}
d4b2f2
 		/* Check for creds specified as options. */
d4b2f2
 		for (j = 0; j < num_soptions; j++) {
d4b2f2
@@ -608,12 +611,16 @@ main(int argc, const char **argv)
d4b2f2
 			printf(_("No agent URL (-A) given, and no default "
d4b2f2
 				 "known.\n"));
d4b2f2
 			poptPrintUsage(pctx, stdout, 0);
d4b2f2
+			free(p);
d4b2f2
+			free(q);
d4b2f2
 			return CM_SUBMIT_STATUS_UNCONFIGURED;
d4b2f2
 		}
d4b2f2
 		if ((sslcert == NULL) || (strlen(sslcert) == 0)) {
d4b2f2
 			printf(_("No agent credentials (-n) given, but they "
d4b2f2
 				 "are needed.\n"));
d4b2f2
 			poptPrintUsage(pctx, stdout, 0);
d4b2f2
+			free(p);
d4b2f2
+			free(q);
d4b2f2
 			return CM_SUBMIT_STATUS_UNCONFIGURED;
d4b2f2
 		}
d4b2f2
 		/* Reading profile defaults for this certificate, then applying
d4b2f2
@@ -778,12 +785,14 @@ main(int argc, const char **argv)
d4b2f2
 			       lasturl);
d4b2f2
 		}
d4b2f2
 		talloc_free(ctx);
d4b2f2
+		free(p);
d4b2f2
 		return CM_SUBMIT_STATUS_UNREACHABLE;
d4b2f2
 	}
d4b2f2
 	if (results == NULL) {
d4b2f2
 		printf(_("Internal error: no response to \"%s?%s\".\n"),
d4b2f2
 		       lasturl, lastparams);
d4b2f2
 		talloc_free(ctx);
d4b2f2
+		free(p);
d4b2f2
 		return CM_SUBMIT_STATUS_REJECTED;
d4b2f2
 	}
d4b2f2
 	switch (op) {
d4b2f2
diff --git a/src/getcert.c b/src/getcert.c
d4b2f2
index ddb28de2..0d527ab0 100644
d4b2f2
--- a/src/getcert.c
d4b2f2
+++ b/src/getcert.c
d4b2f2
@@ -4042,11 +4042,12 @@ thumbprint(const char *s, SECOidTag tag, int bits)
d4b2f2
 	}
d4b2f2
 	u = malloc(length);
d4b2f2
 	if (u == NULL) {
d4b2f2
+		free(t);
d4b2f2
 		goto done;
d4b2f2
 	}
d4b2f2
 	length = cm_store_base64_to_bin(t, -1, u, length);
d4b2f2
+	free(t);
d4b2f2
 	if (PK11_HashBuf(tag, digest, u, length) == SECSuccess) {
d4b2f2
-		free(t);
d4b2f2
 		t = malloc(bits / 4 + howmany(bits, 32));
d4b2f2
 		if (t != NULL) {
d4b2f2
 			ret = t;
d4b2f2
diff --git a/src/store-files.c b/src/store-files.c
d4b2f2
index b97ba5ff..4e57ae16 100644
d4b2f2
--- a/src/store-files.c
d4b2f2
+++ b/src/store-files.c
d4b2f2
@@ -573,6 +573,7 @@ cm_store_file_read_lines(void *parent, FILE *fp)
d4b2f2
 			lines = tlines;
d4b2f2
 		}
d4b2f2
 	}
d4b2f2
+	free(buf);
d4b2f2
 	return lines;
d4b2f2
 }
d4b2f2
 
d4b2f2
diff --git a/src/submit-d.c b/src/submit-d.c
d4b2f2
index 5a4edb3f..36cc9828 100644
d4b2f2
--- a/src/submit-d.c
d4b2f2
+++ b/src/submit-d.c
d4b2f2
@@ -1204,6 +1204,9 @@ restart:
d4b2f2
 		} else {
d4b2f2
 			printf("Error %d.\n", c);
d4b2f2
 		}
d4b2f2
+		if (defaults != nodefault) {
d4b2f2
+			free(defaults);
d4b2f2
+		}
d4b2f2
 		return 1;
d4b2f2
 	}
d4b2f2
 	result = cm_submit_h_results(hctx, NULL) ?: "";
d4b2f2
@@ -1365,6 +1368,9 @@ restart:
d4b2f2
 		/* never reached */
d4b2f2
 		break;
d4b2f2
 	}
d4b2f2
+	if (defaults != nodefault) {
d4b2f2
+		free(defaults);
d4b2f2
+	}
d4b2f2
 	return 0;
d4b2f2
 }
d4b2f2
 #endif
d4b2f2
diff --git a/src/submit-x.c b/src/submit-x.c
d4b2f2
index abebc610..58d007ef 100644
d4b2f2
--- a/src/submit-x.c
d4b2f2
+++ b/src/submit-x.c
d4b2f2
@@ -45,14 +45,17 @@ get_error_message(krb5_context ctx, krb5_error_code kcode)
d4b2f2
 {
d4b2f2
 	const char *ret;
d4b2f2
 #ifdef HAVE_KRB5_GET_ERROR_MESSAGE
d4b2f2
-	ret = ctx ? krb5_get_error_message(ctx, kcode) : NULL;
d4b2f2
-	if (ret == NULL) {
d4b2f2
-		ret = error_message(kcode);
d4b2f2
+	if (ctx) {
d4b2f2
+		const char *msg = krb5_get_error_message(ctx, kcode);
d4b2f2
+		ret = strdup(msg);
d4b2f2
+		krb5_free_error_message(ctx, msg);
d4b2f2
+	} else {
d4b2f2
+		ret = strdup(error_message(kcode));
d4b2f2
 	}
d4b2f2
 #else
d4b2f2
-	ret = error_message(kcode);
d4b2f2
+	ret = strdup(error_message(kcode));
d4b2f2
 #endif
d4b2f2
-	return strdup(ret);
d4b2f2
+	return ret;
d4b2f2
 }
d4b2f2
 
d4b2f2
 char *
d4b2f2
@@ -75,8 +78,6 @@ cm_submit_x_ccache_realm(char **msg)
d4b2f2
 			ret = get_error_message(ctx, kret));
d4b2f2
 		if (msg != NULL) {
d4b2f2
 			*msg = ret;
d4b2f2
-		} else {
d4b2f2
-			free(ret);
d4b2f2
 		}
d4b2f2
 		return NULL;
d4b2f2
 	}
d4b2f2
@@ -86,8 +87,6 @@ cm_submit_x_ccache_realm(char **msg)
d4b2f2
 			ret = get_error_message(ctx, kret));
d4b2f2
 		if (msg != NULL) {
d4b2f2
 			*msg = ret;
d4b2f2
-		} else {
d4b2f2
-			free(ret);
d4b2f2
 		}
d4b2f2
 		return NULL;
d4b2f2
 	}
d4b2f2
@@ -97,8 +96,6 @@ cm_submit_x_ccache_realm(char **msg)
d4b2f2
 			ret = get_error_message(ctx, kret));
d4b2f2
 		if (msg != NULL) {
d4b2f2
 			*msg = ret;
d4b2f2
-		} else {
d4b2f2
-			free(ret);
d4b2f2
 		}
d4b2f2
 		return NULL;
d4b2f2
 	}
d4b2f2
@@ -106,7 +103,7 @@ cm_submit_x_ccache_realm(char **msg)
d4b2f2
 	if (data == NULL) {
d4b2f2
 		fprintf(stderr, "Error retrieving principal realm.\n");
d4b2f2
 		if (msg != NULL) {
d4b2f2
-			*msg = "Error retrieving principal realm.\n";
d4b2f2
+			*msg = strdup("Error retrieving principal realm.\n");
d4b2f2
 		}
d4b2f2
 		return NULL;
d4b2f2
 	}
d4b2f2
@@ -114,7 +111,7 @@ cm_submit_x_ccache_realm(char **msg)
d4b2f2
 	if (ret == NULL) {
d4b2f2
 		fprintf(stderr, "Out of memory for principal realm.\n");
d4b2f2
 		if (msg != NULL) {
d4b2f2
-			*msg = "Out of memory for principal realm.\n";
d4b2f2
+			*msg = strdup("Out of memory for principal realm.\n");
d4b2f2
 		}
d4b2f2
 		return NULL;
d4b2f2
 	}
d4b2f2
@@ -145,8 +142,6 @@ cm_submit_x_make_ccache(const char *ktname, const char *principal, char **msg)
d4b2f2
 		fprintf(stderr, "Error initializing Kerberos: %s.\n", ret);
d4b2f2
 		if (msg != NULL) {
d4b2f2
 			*msg = ret;
d4b2f2
-		} else {
d4b2f2
-			free(ret);
d4b2f2
 		}
d4b2f2
 		return kret;
d4b2f2
 	}
d4b2f2
@@ -160,8 +155,6 @@ cm_submit_x_make_ccache(const char *ktname, const char *principal, char **msg)
d4b2f2
 			ret = get_error_message(ctx, kret));
d4b2f2
 		if (msg != NULL) {
d4b2f2
 			*msg = ret;
d4b2f2
-		} else {
d4b2f2
-			free(ret);
d4b2f2
 		}
d4b2f2
 		return kret;
d4b2f2
 	}
d4b2f2
@@ -173,8 +166,6 @@ cm_submit_x_make_ccache(const char *ktname, const char *principal, char **msg)
d4b2f2
 				principal, ret = get_error_message(ctx, kret));
d4b2f2
 			if (msg != NULL) {
d4b2f2
 				*msg = ret;
d4b2f2
-			} else {
d4b2f2
-				free(ret);
d4b2f2
 			}
d4b2f2
 			return kret;
d4b2f2
 		}
d4b2f2
@@ -186,8 +177,6 @@ cm_submit_x_make_ccache(const char *ktname, const char *principal, char **msg)
d4b2f2
 				ret = get_error_message(ctx, kret));
d4b2f2
 			if (msg != NULL) {
d4b2f2
 				*msg = ret;
d4b2f2
-			} else {
d4b2f2
-				free(ret);
d4b2f2
 			}
d4b2f2
 			return kret;
d4b2f2
 		}
d4b2f2
@@ -209,8 +198,6 @@ cm_submit_x_make_ccache(const char *ktname, const char *principal, char **msg)
d4b2f2
 			ret = get_error_message(ctx, kret));
d4b2f2
 		if (msg != NULL) {
d4b2f2
 			*msg = ret;
d4b2f2
-		} else {
d4b2f2
-			free(ret);
d4b2f2
 		}
d4b2f2
 		return kret;
d4b2f2
 	}
d4b2f2
@@ -229,8 +216,6 @@ cm_submit_x_make_ccache(const char *ktname, const char *principal, char **msg)
d4b2f2
 			ret = get_error_message(ctx, kret));
d4b2f2
 		if (msg != NULL) {
d4b2f2
 			*msg = ret;
d4b2f2
-		} else {
d4b2f2
-			free(ret);
d4b2f2
 		}
d4b2f2
 		return kret;
d4b2f2
 	}
d4b2f2
@@ -245,8 +230,6 @@ cm_submit_x_make_ccache(const char *ktname, const char *principal, char **msg)
d4b2f2
 			ret = get_error_message(ctx, kret));
d4b2f2
 		if (msg != NULL) {
d4b2f2
 			*msg = ret;
d4b2f2
-		} else {
d4b2f2
-			free(ret);
d4b2f2
 		}
d4b2f2
 		return kret;
d4b2f2
 	}
d4b2f2
@@ -257,8 +240,6 @@ cm_submit_x_make_ccache(const char *ktname, const char *principal, char **msg)
d4b2f2
 			ret = get_error_message(ctx, kret));
d4b2f2
 		if (msg != NULL) {
d4b2f2
 			*msg = ret;
d4b2f2
-		} else {
d4b2f2
-			free(ret);
d4b2f2
 		}
d4b2f2
 		return kret;
d4b2f2
 	}
d4b2f2
diff --git a/tests/tools/addcinfo.c b/tests/tools/addcinfo.c
d4b2f2
index 939005c2..e34612a5 100644
d4b2f2
--- a/tests/tools/addcinfo.c
d4b2f2
+++ b/tests/tools/addcinfo.c
d4b2f2
@@ -63,7 +63,7 @@ content_info_template[] = {
d4b2f2
 int
d4b2f2
 main(int argc, char **argv)
d4b2f2
 {
d4b2f2
-	unsigned char *buffer = NULL, buf[BUFSIZ];
d4b2f2
+	unsigned char *buffer = NULL, *newbuffer = NULL, buf[BUFSIZ];
d4b2f2
 	int i, n = 0;
d4b2f2
 	unsigned int j;
d4b2f2
 	SECItem encoded;
d4b2f2
@@ -73,11 +73,13 @@ main(int argc, char **argv)
d4b2f2
 	cm_log_set_method(cm_log_stderr);
d4b2f2
 	cm_log_set_level(3);
d4b2f2
 	while ((i = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
d4b2f2
-		buffer = realloc(buffer, n + i);
d4b2f2
-		if (buffer == NULL) {
d4b2f2
+		newbuffer = realloc(buffer, n + i);
d4b2f2
+		if (newbuffer == NULL) {
d4b2f2
+			free(buffer);
d4b2f2
 			cm_log(0, "Out of memory.\n");
d4b2f2
 			return 1;
d4b2f2
 		}
d4b2f2
+		buffer = newbuffer;
d4b2f2
 		memcpy(buffer + n, buf, i);
d4b2f2
 		n += i;
d4b2f2
 	}
d4b2f2
-- 
9890c6
2.21.0
d4b2f2