diff --git a/src/ocsp.c b/src/ocsp.c index 5d2650a32..44972419c 100644 --- a/src/ocsp.c +++ b/src/ocsp.c @@ -312,6 +312,7 @@ int CheckOcspResponse(WOLFSSL_OCSP *ocsp, byte *response, int responseSz, return MEMORY_E; } #endif + XMEMSET(ocspResponse, 0, sizeof(OcspResponse)); InitOcspResponse(ocspResponse, newSingle, newStatus, response, responseSz, ocsp->cm->heap); @@ -399,6 +400,7 @@ end: ret = OCSP_LOOKUP_FAIL; } + FreeOcspResponse(ocspResponse); #ifdef WOLFSSL_SMALL_STACK XFREE(newStatus, NULL, DYNAMIC_TYPE_OCSP_STATUS); XFREE(newSingle, NULL, DYNAMIC_TYPE_OCSP_ENTRY); diff --git a/tests/api.c b/tests/api.c index bcdadc575..e3872e4eb 100644 --- a/tests/api.c +++ b/tests/api.c @@ -1724,7 +1724,7 @@ static int test_wolfSSL_CheckOCSPResponse(void) /* check loading a response with multiple certs */ { WOLFSSL_CERT_MANAGER* cm = NULL; - OcspEntry entry[1]; + OcspEntry *entry; CertStatus status[1]; OcspRequest* request; @@ -1741,6 +1741,10 @@ static int test_wolfSSL_CheckOCSPResponse(void) 0x7E, 0x72, 0x15, 0x21 }; + entry = (OcspEntry*)XMALLOC(sizeof(OcspEntry), NULL, + DYNAMIC_TYPE_OPENSSL); + AssertNotNull(entry); + XMEMSET(entry, 0, sizeof(OcspEntry)); XMEMSET(status, 0, sizeof(CertStatus)); @@ -1776,6 +1780,7 @@ static int test_wolfSSL_CheckOCSPResponse(void) AssertIntEQ(XMEMCMP(status->serial, entry->status->serial, status->serialSz), 0); + wolfSSL_OCSP_CERTID_free(entry); wolfSSL_OCSP_REQUEST_free(request); wolfSSL_CertManagerFree(cm); } diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index e8018ea0e..2c962ffb3 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -34675,11 +34675,14 @@ void InitOcspResponse(OcspResponse* resp, OcspEntry* single, CertStatus* status, void FreeOcspResponse(OcspResponse* resp) { OcspEntry *single, *next; - for (single = resp->single; single; single = next) { - next = single->next; - if (single->isDynamic) { - XFREE(single->status, resp->heap, DYNAMIC_TYPE_OCSP_STATUS); - XFREE(single, resp->heap, DYNAMIC_TYPE_OCSP_ENTRY); + + if (resp != NULL) { + for (single = resp->single; single; single = next) { + next = single->next; + if (single->isDynamic) { + XFREE(single->status, resp->heap, DYNAMIC_TYPE_OCSP_STATUS); + XFREE(single, resp->heap, DYNAMIC_TYPE_OCSP_ENTRY); + } } } }