forked from wolfSSL/wolfssl
Merge pull request #5507 from haydenroche5/general_names_leak
Fix wolfSSL_GENERAL_NAMES_free memory leak.
This commit is contained in:
@ -4315,7 +4315,7 @@ void wolfSSL_GENERAL_NAMES_free(WOLFSSL_GENERAL_NAMES *gens)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wolfSSL_sk_free(gens);
|
wolfSSL_sk_GENERAL_NAME_free(gens);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(OPENSSL_ALL) && !defined(NO_BIO)
|
#if defined(OPENSSL_ALL) && !defined(NO_BIO)
|
||||||
|
51
tests/api.c
51
tests/api.c
@ -41511,6 +41511,8 @@ static int test_wolfSSL_sk_GENERAL_NAME(void)
|
|||||||
unsigned char buf[4096];
|
unsigned char buf[4096];
|
||||||
const unsigned char* bufPt;
|
const unsigned char* bufPt;
|
||||||
int bytes, i;
|
int bytes, i;
|
||||||
|
int j;
|
||||||
|
|
||||||
XFILE f;
|
XFILE f;
|
||||||
STACK_OF(GENERAL_NAME)* sk;
|
STACK_OF(GENERAL_NAME)* sk;
|
||||||
|
|
||||||
@ -41521,30 +41523,41 @@ static int test_wolfSSL_sk_GENERAL_NAME(void)
|
|||||||
AssertIntGT((bytes = (int)XFREAD(buf, 1, sizeof(buf), f)), 0);
|
AssertIntGT((bytes = (int)XFREAD(buf, 1, sizeof(buf), f)), 0);
|
||||||
XFCLOSE(f);
|
XFCLOSE(f);
|
||||||
|
|
||||||
bufPt = buf;
|
for (j = 0; j < 2; ++j) {
|
||||||
AssertNotNull(x509 = d2i_X509(NULL, &bufPt, bytes));
|
bufPt = buf;
|
||||||
|
AssertNotNull(x509 = d2i_X509(NULL, &bufPt, bytes));
|
||||||
|
|
||||||
AssertNotNull(sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509,
|
AssertNotNull(sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509,
|
||||||
NID_subject_alt_name, NULL, NULL));
|
NID_subject_alt_name, NULL, NULL));
|
||||||
|
|
||||||
AssertIntEQ(sk_GENERAL_NAME_num(sk), 1);
|
AssertIntEQ(sk_GENERAL_NAME_num(sk), 1);
|
||||||
for (i = 0; i < sk_GENERAL_NAME_num(sk); i++) {
|
for (i = 0; i < sk_GENERAL_NAME_num(sk); i++) {
|
||||||
AssertNotNull(gn = sk_GENERAL_NAME_value(sk, i));
|
AssertNotNull(gn = sk_GENERAL_NAME_value(sk, i));
|
||||||
|
|
||||||
switch (gn->type) {
|
switch (gn->type) {
|
||||||
case GEN_DNS:
|
case GEN_DNS:
|
||||||
printf("found type GEN_DNS\n");
|
printf("found type GEN_DNS\n");
|
||||||
break;
|
break;
|
||||||
case GEN_EMAIL:
|
case GEN_EMAIL:
|
||||||
printf("found type GEN_EMAIL\n");
|
printf("found type GEN_EMAIL\n");
|
||||||
break;
|
break;
|
||||||
case GEN_URI:
|
case GEN_URI:
|
||||||
printf("found type GEN_URI\n");
|
printf("found type GEN_URI\n");
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
X509_free(x509);
|
||||||
|
if (j == 0) {
|
||||||
|
sk_GENERAL_NAME_pop_free(sk, GENERAL_NAME_free);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/*
|
||||||
|
* We had a bug where GENERAL_NAMES_free didn't free all the memory
|
||||||
|
* it was supposed to. This is a regression test for that bug.
|
||||||
|
*/
|
||||||
|
GENERAL_NAMES_free(sk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
X509_free(x509);
|
|
||||||
sk_GENERAL_NAME_pop_free(sk, GENERAL_NAME_free);
|
|
||||||
|
|
||||||
printf(resultFmt, passed);
|
printf(resultFmt, passed);
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user