@@ -13587,21 +13587,28 @@ static int ProcessCSR_ex(WOLFSSL* ssl, byte* input, word32* inOutIdx,
1358713587
1358813588 #ifdef WOLFSSL_SMALL_STACK
1358913589 status = (CertStatus*)XMALLOC(sizeof(CertStatus), ssl->heap,
13590- DYNAMIC_TYPE_OCSP_STATUS);
13590+ DYNAMIC_TYPE_OCSP_STATUS);
1359113591 single = (OcspEntry*)XMALLOC(sizeof(OcspEntry), ssl->heap,
13592- DYNAMIC_TYPE_OCSP_ENTRY);
13592+ DYNAMIC_TYPE_OCSP_ENTRY);
1359313593 response = (OcspResponse*)XMALLOC(sizeof(OcspResponse), ssl->heap,
13594- DYNAMIC_TYPE_OCSP_REQUEST);
13594+ DYNAMIC_TYPE_OCSP_REQUEST);
1359513595
1359613596 if (status == NULL || single == NULL || response == NULL) {
13597- XFREE(status, ssl->heap, DYNAMIC_TYPE_OCSP_STATUS);
13598- XFREE(single, ssl->heap, DYNAMIC_TYPE_OCSP_ENTRY);
13599- XFREE(response, ssl->heap, DYNAMIC_TYPE_OCSP_REQUEST);
13597+ if (status != NULL) {
13598+ XFREE(status, ssl->heap, DYNAMIC_TYPE_OCSP_STATUS);
13599+ }
13600+ if (single != NULL) {
13601+ XFREE(single, ssl->heap, DYNAMIC_TYPE_OCSP_ENTRY);
13602+ }
13603+ if (response != NULL) {
13604+ XFREE(response, ssl->heap, DYNAMIC_TYPE_OCSP_REQUEST);
13605+ }
1360013606
1360113607 return MEMORY_ERROR;
1360213608 }
1360313609 #endif
1360413610
13611+ /* InitOcspResponse sets single and status to response struct. */
1360513612 InitOcspResponse(response, single, status, input +*inOutIdx, status_length, ssl->heap);
1360613613
1360713614 if (OcspResponseDecode(response, SSL_CM(ssl), ssl->heap, 0) != 0)
@@ -13622,12 +13629,14 @@ static int ProcessCSR_ex(WOLFSSL* ssl, byte* input, word32* inOutIdx,
1362213629
1362313630 *inOutIdx += status_length;
1362413631
13632+ /* FreeOcspResponse frees status and single only if
13633+ * single->isDynamic is set. */
1362513634 FreeOcspResponse(response);
1362613635
1362713636 #ifdef WOLFSSL_SMALL_STACK
13628- XFREE(status, ssl->heap, DYNAMIC_TYPE_OCSP_STATUS);
13629- XFREE(single, ssl->heap, DYNAMIC_TYPE_OCSP_ENTRY);
13630- XFREE(response, ssl->heap, DYNAMIC_TYPE_OCSP_REQUEST);
13637+ XFREE(status, ssl->heap, DYNAMIC_TYPE_OCSP_STATUS);
13638+ XFREE(single, ssl->heap, DYNAMIC_TYPE_OCSP_ENTRY);
13639+ XFREE(response, ssl->heap, DYNAMIC_TYPE_OCSP_REQUEST);
1363113640 #endif
1363213641
1363313642 WOLFSSL_LEAVE("ProcessCSR", ret);
0 commit comments