diff options
author | Daiki Ueno <ueno@gnu.org> | 2021-01-25 13:24:24 +0000 |
---|---|---|
committer | Daiki Ueno <ueno@gnu.org> | 2021-01-25 13:24:24 +0000 |
commit | 060811143e20e336dc4c86b29164d76800f16539 (patch) | |
tree | 185fd63bb483a224cf894e6eaa80fd880642f487 | |
parent | 67ccc7d3a3cc4adab82fff546b97a44c244f38fd (diff) | |
parent | 3ba322f19515fe7a56a9dddddd2c255e951942e6 (diff) | |
download | gnutls-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.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; |