]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Deinitialize pcerts array elements during cleanup.
authorTom Carroll <incentivedesign@gmail.com>
Sun, 10 Jan 2021 23:28:50 +0000 (15:28 -0800)
committerTom Carroll <incentivedesign@gmail.com>
Mon, 11 Jan 2021 05:54:25 +0000 (21:54 -0800)
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>
lib/cert-cred-x509.c

index 04aa3169b6e20eacf392b45cd062fd5ed3817b88..f8cd881c2b6ecbf35a0d24933868171d827e89e9 100644 (file)
@@ -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;