If the checks involving crlfile fail one way or the other, we'll leak
crldp. Here's one way to fix it. We could also drop the free(crldp) in
the body or add a free to the relevant conditional.
Index: mft.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/mft.c,v
retrieving revision 1.58
diff -u -p -r1.58 mft.c
--- mft.c 19 Apr 2022 09:52:29 -0000 1.58
+++ mft.c 19 Apr 2022 18:15:49 -0000
@@ -446,7 +446,7 @@ mft_parse(X509 **x509, const char *fn, c
int rc = 0;
size_t cmsz;
unsigned char *cms;
- char *crldp, *crlfile;
+ char *crldp = NULL, *crlfile;
memset(&p, 0, sizeof(struct parse));
p.fn = fn;
@@ -489,6 +489,7 @@ mft_parse(X509 **x509, const char *fn, c
if ((p.res->crl = strdup(crlfile + 1)) == NULL)
err(1, NULL);
free(crldp);
+ crldp = NULL;
if (mft_parse_econtent(cms, cmsz, &p) == 0)
goto out;
@@ -501,6 +502,7 @@ out:
X509_free(*x509);
*x509 = NULL;
}
+ free(crldp);
free(cms);
return p.res;
}