summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Carroll <incentivedesign@gmail.com>2021-01-10 15:28:50 -0800
committerTom Carroll <incentivedesign@gmail.com>2021-01-10 21:54:25 -0800
commit3ba322f19515fe7a56a9dddddd2c255e951942e6 (patch)
tree185fd63bb483a224cf894e6eaa80fd880642f487
parent67ccc7d3a3cc4adab82fff546b97a44c244f38fd (diff)
downloadgnutls-3ba322f19515fe7a56a9dddddd2c255e951942e6.tar.gz
Deinitialize pcerts array elements during cleanup.
In gnutls_certificate_set_x509_key() cleanup, the pcert elements should be deinitialized, freeing pcert's pubkey and cert fields. Signed-off-by: Tom Carroll <incentivedesign@gmail.com>
-rw-r--r--lib/cert-cred-x509.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/cert-cred-x509.c b/lib/cert-cred-x509.c
index 04aa3169b6..f8cd881c2b 100644
--- a/lib/cert-cred-x509.c
+++ b/lib/cert-cred-x509.c
@@ -739,6 +739,7 @@ gnutls_certificate_set_x509_key(gnutls_certificate_credentials_t res,
gnutls_x509_privkey_t key)
{
int ret;
+ int npcerts = 0;
gnutls_privkey_t pkey;
gnutls_pcert_st *pcerts = NULL;
gnutls_str_array_t names;
@@ -785,10 +786,11 @@ gnutls_certificate_set_x509_key(gnutls_certificate_credentials_t res,
gnutls_assert();
goto cleanup;
}
+ npcerts = cert_list_size;
ret =
_gnutls_certificate_credential_append_keypair(res, pkey, names, pcerts,
- cert_list_size);
+ npcerts);
if (ret < 0) {
gnutls_assert();
goto cleanup;
@@ -807,6 +809,8 @@ gnutls_certificate_set_x509_key(gnutls_certificate_credentials_t res,
CRED_RET_SUCCESS(res);
cleanup:
+ while (npcerts-- > 0)
+ gnutls_pcert_deinit(&pcerts[npcerts]);
gnutls_free(pcerts);
_gnutls_str_array_clear(&names);
return ret;