diff --git a/src/ssl.c b/src/ssl.c index f2593f455..f9fa5639e 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -20096,13 +20096,7 @@ void wolfSSL_sk_ACCESS_DESCRIPTION_pop_free(WOLFSSL_STACK* sk, if (f) f(sk->data.access); else { - if(sk->data.access->method) { - - wolfSSL_ASN1_OBJECT_free(sk->data.access->method); - } - if(sk->data.access->location) { - wolfSSL_GENERAL_NAME_free(sk->data.access->location); - } + wolfSSL_ACCESS_DESCRIPTION_free(sk->data.access); } sk->data.access = NULL; } @@ -20114,6 +20108,18 @@ void wolfSSL_sk_ACCESS_DESCRIPTION_free(WOLFSSL_STACK* sk) wolfSSL_sk_ACCESS_DESCRIPTION_pop_free(sk, NULL); } + +/* AUTHORITY_INFO_ACCESS object is a stack of ACCESS_DESCRIPTION objects, + * to free the stack the WOLFSSL_ACCESS_DESCRIPTION stack free function is + * used */ +void wolfSSL_AUTHORITY_INFO_ACCESS_free( + WOLF_STACK_OF(WOLFSSL_ACCESS_DESCRIPTION)* sk) +{ + WOLFSSL_ENTER("wolfSSL_AUTHORITY_INFO_ACCESS_free"); + wolfSSL_sk_ACCESS_DESCRIPTION_pop_free(sk, NULL); +} + + void wolfSSL_ACCESS_DESCRIPTION_free(WOLFSSL_ACCESS_DESCRIPTION* access) { WOLFSSL_ENTER("wolfSSL_ACCESS_DESCRIPTION_free"); @@ -20124,6 +20130,7 @@ void wolfSSL_ACCESS_DESCRIPTION_free(WOLFSSL_ACCESS_DESCRIPTION* access) wolfSSL_ASN1_OBJECT_free(access->method); if (access->location) wolfSSL_GENERAL_NAME_free(access->location); + XFREE(access, NULL, DYNAMIC_TYPE_X509_EXT); /* access = NULL, don't try to access or double free it */ } @@ -20495,15 +20502,6 @@ int wolfSSL_sk_ACCESS_DESCRIPTION_num(WOLFSSL_STACK* sk) return (int)sk->num; } -#ifndef NO_WOLFSSL_STUB -/* similar to call to sk_ACCESS_DESCRIPTION_pop_free */ -void wolfSSL_AUTHORITY_INFO_ACCESS_free( - WOLF_STACK_OF(WOLFSSL_ACCESS_DESCRIPTION)* sk) -{ - WOLFSSL_STUB("wolfSSL_AUTHORITY_INFO_ACCESS_free"); - (void)sk; -} -#endif /* returns the node at index "idx", NULL if not found */ WOLFSSL_STACK* wolfSSL_sk_get_node(WOLFSSL_STACK* sk, int idx) diff --git a/tests/api.c b/tests/api.c index c740410e9..83e74d021 100644 --- a/tests/api.c +++ b/tests/api.c @@ -36515,7 +36515,10 @@ static void test_wolfSSL_GENERAL_NAME_print(void) AssertIntEQ(XSTRNCMP((const char*)outbuf, uriStr, XSTRLEN(uriStr)), 0); wolfSSL_sk_ACCESS_DESCRIPTION_pop_free(aia, NULL); - XFREE(ad, NULL, DYNAMIC_TYPE_X509_EXT); + + aia = (AUTHORITY_INFO_ACCESS*)wolfSSL_X509V3_EXT_d2i(ext); + AssertNotNull(aia); + AUTHORITY_INFO_ACCESS_free(aia); X509_free(x509); /* test for GEN_IPADD */ @@ -41113,7 +41116,6 @@ static void test_wolfSSL_X509V3_EXT(void) { AssertIntEQ(actual, 0); wolfSSL_sk_ACCESS_DESCRIPTION_pop_free(aia, NULL); - XFREE(ad, NULL, DYNAMIC_TYPE_X509_EXT); #else (void) aia; (void) ad; (void) adObj; (void) gn; #endif