mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 10:47:28 +02:00
Fix for possible NULL buffer use if certChain not loaded and OCSP cert request called.
This commit is contained in:
@ -17465,6 +17465,7 @@ int SendCertificateStatus(WOLFSSL* ssl)
|
|||||||
#else
|
#else
|
||||||
DecodedCert cert[1];
|
DecodedCert cert[1];
|
||||||
#endif
|
#endif
|
||||||
|
DerBuffer* chain;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
cert = (DecodedCert*)XMALLOC(sizeof(DecodedCert), ssl->heap,
|
cert = (DecodedCert*)XMALLOC(sizeof(DecodedCert), ssl->heap,
|
||||||
@ -17481,14 +17482,20 @@ int SendCertificateStatus(WOLFSSL* ssl)
|
|||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (idx + OPAQUE24_LEN < ssl->buffers.certChain->length) {
|
/* use certChain if available, otherwise use peer certificate */
|
||||||
c24to32(ssl->buffers.certChain->buffer + idx, &der.length);
|
chain = ssl->buffers.certChain;
|
||||||
|
if (chain == NULL) {
|
||||||
|
chain = ssl->buffers.certificate;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (chain && idx + OPAQUE24_LEN < chain->length) {
|
||||||
|
c24to32(chain->buffer + idx, &der.length);
|
||||||
idx += OPAQUE24_LEN;
|
idx += OPAQUE24_LEN;
|
||||||
|
|
||||||
der.buffer = ssl->buffers.certChain->buffer + idx;
|
der.buffer = chain->buffer + idx;
|
||||||
idx += der.length;
|
idx += der.length;
|
||||||
|
|
||||||
if (idx > ssl->buffers.certChain->length)
|
if (idx > chain->length)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ret = CreateOcspRequest(ssl, request, cert, der.buffer,
|
ret = CreateOcspRequest(ssl, request, cert, der.buffer,
|
||||||
|
Reference in New Issue
Block a user