clean up memory after test and don't leak x509 with get session peer

This commit is contained in:
Jacob Barthelmeh
2020-01-30 10:22:01 -07:00
committed by Eric Blankenhorn
parent 258382048d
commit 76eec8884b
3 changed files with 21 additions and 2 deletions

View File

@ -13468,9 +13468,14 @@ WOLFSSL_X509* wolfSSL_SESSION_get0_peer(WOLFSSL_SESSION* session)
WOLFSSL_MSG("bad count found");
return NULL;
}
return wolfSSL_get_chain_X509(&session->chain, 0);
if (session->peer == NULL) {
session->peer = wolfSSL_get_chain_X509(&session->chain, 0);
}
return session->peer;
}
WOLFSSL_MSG("No session passed in");
return NULL;
}
@ -21638,6 +21643,9 @@ WOLFSSL_SESSION* wolfSSL_SESSION_dup(WOLFSSL_SESSION* session)
} else {
copy->ticket = copy->staticTicket;
}
#endif
#if defined(SESSION_CERTS) && defined(OPENSSL_EXTRA)
copy->peer = wolfSSL_X509_dup(session->peer);
#endif
}
return copy;
@ -21654,6 +21662,12 @@ void wolfSSL_SESSION_free(WOLFSSL_SESSION* session)
if (session == NULL)
return;
#if defined(SESSION_CERTS) && defined(OPENSSL_EXTRA)
if (session->peer) {
wolfSSL_X509_free(session->peer);
}
#endif
#ifdef HAVE_EXT_CACHE
if (session->isAlloced) {
#ifdef HAVE_SESSION_TICKET

View File

@ -23993,7 +23993,7 @@ static void test_wolfSSL_BIO_should_retry(void)
wolfSSL_SSLSetIORecv(ssl, forceWantRead);
AssertNotNull(bio = BIO_new(BIO_f_ssl()));
BIO_set_ssl(bio, ssl, BIO_NOCLOSE);
BIO_set_ssl(bio, ssl, BIO_CLOSE);
AssertIntLE(BIO_write(bio, msg, msgSz), 0);
AssertIntNE(BIO_should_retry(bio), 0);
@ -24013,6 +24013,7 @@ static void test_wolfSSL_BIO_should_retry(void)
AssertIntEQ(XMEMCMP(reply, "I hear you fa shizzle!",
XSTRLEN("I hear you fa shizzle!")), 0);
BIO_free(bio);
wolfSSL_CTX_free(ctx);
join_thread(serverThread);
FreeTcpReady(&ready);
@ -24217,6 +24218,7 @@ static void test_wolfSSL_BIO_f_md(void)
AssertIntEQ(XMEMCMP(check, testResult, sizeof(testResult)), 0);
EVP_PKEY_free(key);
BIO_free(bio);
BIO_free(mem);

View File

@ -3076,6 +3076,9 @@ struct WOLFSSL_SESSION {
byte masterSecret[SECRET_LEN]; /* stored secret */
word16 haveEMS; /* ext master secret flag */
#ifdef SESSION_CERTS
#ifdef OPENSSL_EXTRA
WOLFSSL_X509* peer; /* peer cert */
#endif
WOLFSSL_X509_CHAIN chain; /* peer cert chain, static */
#ifdef WOLFSSL_ALT_CERT_CHAINS
WOLFSSL_X509_CHAIN altChain; /* peer alt cert chain, static */