diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2015-08-12 22:48:45 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2015-08-12 23:06:01 +0200 |
commit | 1ce917c509d00924742707a84b63e25eb50cedd9 (patch) | |
tree | 97aaaf20844e9cbadeed69c8f5b423e45d56bcb6 /src | |
parent | 09c859d5d816e0929959d196c004bd9a83aa9bbf (diff) | |
download | gnutls-1ce917c509d00924742707a84b63e25eb50cedd9.tar.gz |
certtool: eliminated memory leaks due to new cert loading code
Diffstat (limited to 'src')
-rw-r--r-- | src/certtool-common.c | 12 | ||||
-rw-r--r-- | src/certtool.c | 7 |
2 files changed, 16 insertions, 3 deletions
diff --git a/src/certtool-common.c b/src/certtool-common.c index 7cf5581d20..e092ef20b6 100644 --- a/src/certtool-common.c +++ b/src/certtool-common.c @@ -358,11 +358,19 @@ load_x509_private_key(int mand, common_info_st * info) gnutls_x509_crt_t load_cert(int mand, common_info_st * info) { gnutls_x509_crt_t *crt; - size_t size; + gnutls_x509_crt_t ret_crt; + size_t size, i; crt = load_cert_list(mand, &size, info); + if (crt) { + ret_crt = crt[0]; + for (i=1;i<size;i++) + gnutls_x509_crt_deinit(crt[i]); + gnutls_free(crt); + return ret_crt; + } - return crt ? crt[0] : NULL; + return NULL; } /* Loads a certificate list diff --git a/src/certtool.c b/src/certtool.c index afb69d66ac..4467514393 100644 --- a/src/certtool.c +++ b/src/certtool.c @@ -659,7 +659,9 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo) gnutls_strerror(result)); exit(1); } + gnutls_x509_crt_deinit(crts[i]); } + gnutls_free(crts); result = gnutls_x509_crl_set_this_update(crl, now); if (result < 0) { @@ -933,6 +935,7 @@ static void generate_signed_crl(common_info_st * cinfo) gnutls_privkey_deinit(ca_key); gnutls_x509_crl_deinit(crl); + gnutls_x509_crt_deinit(ca_crt); } static void update_signed_certificate(common_info_st * cinfo) @@ -3003,6 +3006,7 @@ void pkcs7_generate(common_info_st * cinfo) } gnutls_x509_crt_deinit(crts[i]); } + gnutls_free(crts); for (i=0;i<crl_size;i++) { ret = gnutls_pkcs7_set_crl(pkcs7, crls[i]); @@ -3012,6 +3016,7 @@ void pkcs7_generate(common_info_st * cinfo) } gnutls_x509_crl_deinit(crls[i]); } + gnutls_free(crls); ret = gnutls_pkcs7_export2(pkcs7, outcert_format, &tmp); @@ -3289,7 +3294,7 @@ void generate_pkcs12(common_info_st * cinfo) } fwrite(lbuffer, 1, size, outfile); - + gnutls_free(crts); } static const char *BAGTYPE(gnutls_pkcs12_bag_type_t x) |