summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaiki Ueno <ueno@gnu.org>2021-01-25 13:24:24 +0000
committerDaiki Ueno <ueno@gnu.org>2021-01-25 13:24:24 +0000
commit060811143e20e336dc4c86b29164d76800f16539 (patch)
tree185fd63bb483a224cf894e6eaa80fd880642f487
parent67ccc7d3a3cc4adab82fff546b97a44c244f38fd (diff)
parent3ba322f19515fe7a56a9dddddd2c255e951942e6 (diff)
downloadgnutls-060811143e20e336dc4c86b29164d76800f16539.tar.gz
Merge branch 'pcert_deinit_on_cleanup' into 'master'
gnutls_certificate_set_x509_key(): deinitialize pcerts array elements during cleanup See merge request gnutls/gnutls!1378
-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;