diff options
author | Tom Carroll <incentivedesign@gmail.com> | 2021-01-10 15:28:50 -0800 |
---|---|---|
committer | Tom Carroll <incentivedesign@gmail.com> | 2021-01-10 21:54:25 -0800 |
commit | 3ba322f19515fe7a56a9dddddd2c255e951942e6 (patch) | |
tree | 185fd63bb483a224cf894e6eaa80fd880642f487 | |
parent | 67ccc7d3a3cc4adab82fff546b97a44c244f38fd (diff) | |
download | gnutls-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.c | 6 |
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; |