mirror of https://github.com/wolfSSL/wolfssl
fix leak with multiple entries
This commit is contained in:
parent
29a5c04c2e
commit
a26b89f66b
|
@ -312,6 +312,7 @@ int CheckOcspResponse(WOLFSSL_OCSP *ocsp, byte *response, int responseSz,
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
XMEMSET(ocspResponse, 0, sizeof(OcspResponse));
|
||||||
InitOcspResponse(ocspResponse, newSingle, newStatus, response, responseSz,
|
InitOcspResponse(ocspResponse, newSingle, newStatus, response, responseSz,
|
||||||
ocsp->cm->heap);
|
ocsp->cm->heap);
|
||||||
|
|
||||||
|
@ -399,6 +400,7 @@ end:
|
||||||
ret = OCSP_LOOKUP_FAIL;
|
ret = OCSP_LOOKUP_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FreeOcspResponse(ocspResponse);
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
XFREE(newStatus, NULL, DYNAMIC_TYPE_OCSP_STATUS);
|
XFREE(newStatus, NULL, DYNAMIC_TYPE_OCSP_STATUS);
|
||||||
XFREE(newSingle, NULL, DYNAMIC_TYPE_OCSP_ENTRY);
|
XFREE(newSingle, NULL, DYNAMIC_TYPE_OCSP_ENTRY);
|
||||||
|
|
|
@ -1724,7 +1724,7 @@ static int test_wolfSSL_CheckOCSPResponse(void)
|
||||||
/* check loading a response with multiple certs */
|
/* check loading a response with multiple certs */
|
||||||
{
|
{
|
||||||
WOLFSSL_CERT_MANAGER* cm = NULL;
|
WOLFSSL_CERT_MANAGER* cm = NULL;
|
||||||
OcspEntry entry[1];
|
OcspEntry *entry;
|
||||||
CertStatus status[1];
|
CertStatus status[1];
|
||||||
OcspRequest* request;
|
OcspRequest* request;
|
||||||
|
|
||||||
|
@ -1741,6 +1741,10 @@ static int test_wolfSSL_CheckOCSPResponse(void)
|
||||||
0x7E, 0x72, 0x15, 0x21
|
0x7E, 0x72, 0x15, 0x21
|
||||||
};
|
};
|
||||||
|
|
||||||
|
entry = (OcspEntry*)XMALLOC(sizeof(OcspEntry), NULL,
|
||||||
|
DYNAMIC_TYPE_OPENSSL);
|
||||||
|
AssertNotNull(entry);
|
||||||
|
|
||||||
XMEMSET(entry, 0, sizeof(OcspEntry));
|
XMEMSET(entry, 0, sizeof(OcspEntry));
|
||||||
XMEMSET(status, 0, sizeof(CertStatus));
|
XMEMSET(status, 0, sizeof(CertStatus));
|
||||||
|
|
||||||
|
@ -1776,6 +1780,7 @@ static int test_wolfSSL_CheckOCSPResponse(void)
|
||||||
AssertIntEQ(XMEMCMP(status->serial, entry->status->serial,
|
AssertIntEQ(XMEMCMP(status->serial, entry->status->serial,
|
||||||
status->serialSz), 0);
|
status->serialSz), 0);
|
||||||
|
|
||||||
|
wolfSSL_OCSP_CERTID_free(entry);
|
||||||
wolfSSL_OCSP_REQUEST_free(request);
|
wolfSSL_OCSP_REQUEST_free(request);
|
||||||
wolfSSL_CertManagerFree(cm);
|
wolfSSL_CertManagerFree(cm);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34675,11 +34675,14 @@ void InitOcspResponse(OcspResponse* resp, OcspEntry* single, CertStatus* status,
|
||||||
void FreeOcspResponse(OcspResponse* resp)
|
void FreeOcspResponse(OcspResponse* resp)
|
||||||
{
|
{
|
||||||
OcspEntry *single, *next;
|
OcspEntry *single, *next;
|
||||||
for (single = resp->single; single; single = next) {
|
|
||||||
next = single->next;
|
if (resp != NULL) {
|
||||||
if (single->isDynamic) {
|
for (single = resp->single; single; single = next) {
|
||||||
XFREE(single->status, resp->heap, DYNAMIC_TYPE_OCSP_STATUS);
|
next = single->next;
|
||||||
XFREE(single, resp->heap, DYNAMIC_TYPE_OCSP_ENTRY);
|
if (single->isDynamic) {
|
||||||
|
XFREE(single->status, resp->heap, DYNAMIC_TYPE_OCSP_STATUS);
|
||||||
|
XFREE(single, resp->heap, DYNAMIC_TYPE_OCSP_ENTRY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue