From 26eea36d7ff618c389d661825d27b7dd6cd00f5e Mon Sep 17 00:00:00 2001 From: Carie Pointer Date: Fri, 3 Jan 2020 15:40:52 -0800 Subject: [PATCH] Fix X509_NAME issues for Apache --- src/ssl.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index 8a2bf7391..d8e087991 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -34566,15 +34566,17 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl) /* copy contents */ XMEMCPY(dup, name, sizeof(WOLFSSL_X509_NAME)); + InitX509Name(dup, 1); + /* Need to set dynamicName before copying */ + dup->dynamicName = 1; + dup->sz = name->sz; /* handle dynamic portions */ - if (name->dynamicName) { - if (!(dup->name = (char*)XMALLOC(name->sz, 0, - DYNAMIC_TYPE_OPENSSL))) { - goto err; - } - XMEMCPY(dup->name, name->name, name->sz); + if (!(dup->name = (char*)XMALLOC(name->sz, 0, + DYNAMIC_TYPE_OPENSSL))) { + goto err; } + XMEMCPY(dup->name, name->name, name->sz); #if (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ !defined(NO_ASN) if (!(dup->fullName.fullName = (char*)XMALLOC(name->fullName.fullNameLen, @@ -39699,10 +39701,24 @@ void wolfSSL_sk_X509_NAME_pop_free(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk, XFREE(sk, sk->heap, DYNAMIC_TYPE_OPENSSL); } -/* Free only the sk structure */ +/* Free only the sk structure, NOT X509_NAME members */ void wolfSSL_sk_X509_NAME_free(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk) { - wolfSSL_sk_X509_NAME_pop_free(sk, NULL); + WOLFSSL_STACK* node; + WOLFSSL_ENTER("wolfSSL_sk_X509_NAME_free"); + + if (sk == NULL) + return; + + node = sk->next; + while (sk->num > 1) { + WOLFSSL_STACK* tmp = node; + node = node->next; + XFREE(tmp, NULL, DYNAMIC_TYPE_OPENSSL); + sk->num -= 1; + } + + XFREE(sk, sk->heap, DYNAMIC_TYPE_OPENSSL); } #if defined(WOLFSSL_APACHE_HTTPD) || defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX)