mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 12:14:38 +02:00
crl: refactoring SwapLists to reduce stack usage:
--- variable tmp moved to the heap (sizeof(CYASS_CRL) saved)
This commit is contained in:
46
src/crl.c
46
src/crl.c
@@ -314,47 +314,73 @@ int BufferLoadCRL(CYASSL_CRL* crl, const byte* buff, long sz, int type)
|
|||||||
static int SwapLists(CYASSL_CRL* crl)
|
static int SwapLists(CYASSL_CRL* crl)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
CYASSL_CRL tmp;
|
|
||||||
CRL_Entry* newList;
|
CRL_Entry* newList;
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
CYASSL_CRL* tmp;
|
||||||
|
#else
|
||||||
|
CYASSL_CRL tmp[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (InitCRL(&tmp, crl->cm) < 0) {
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
tmp = (CYASSL_CRL*)XMALLOC(sizeof(CYASSL_CRL), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (tmp == NULL)
|
||||||
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (InitCRL(tmp, crl->cm) < 0) {
|
||||||
CYASSL_MSG("Init tmp CRL failed");
|
CYASSL_MSG("Init tmp CRL failed");
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (crl->monitors[0].path) {
|
if (crl->monitors[0].path) {
|
||||||
ret = LoadCRL(&tmp, crl->monitors[0].path, SSL_FILETYPE_PEM, 0);
|
ret = LoadCRL(tmp, crl->monitors[0].path, SSL_FILETYPE_PEM, 0);
|
||||||
if (ret != SSL_SUCCESS) {
|
if (ret != SSL_SUCCESS) {
|
||||||
CYASSL_MSG("PEM LoadCRL on dir change failed");
|
CYASSL_MSG("PEM LoadCRL on dir change failed");
|
||||||
FreeCRL(&tmp, 0);
|
FreeCRL(tmp, 0);
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (crl->monitors[1].path) {
|
if (crl->monitors[1].path) {
|
||||||
ret = LoadCRL(&tmp, crl->monitors[1].path, SSL_FILETYPE_ASN1, 0);
|
ret = LoadCRL(tmp, crl->monitors[1].path, SSL_FILETYPE_ASN1, 0);
|
||||||
if (ret != SSL_SUCCESS) {
|
if (ret != SSL_SUCCESS) {
|
||||||
CYASSL_MSG("DER LoadCRL on dir change failed");
|
CYASSL_MSG("DER LoadCRL on dir change failed");
|
||||||
FreeCRL(&tmp, 0);
|
FreeCRL(tmp, 0);
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LockMutex(&crl->crlLock) != 0) {
|
if (LockMutex(&crl->crlLock) != 0) {
|
||||||
CYASSL_MSG("LockMutex failed");
|
CYASSL_MSG("LockMutex failed");
|
||||||
FreeCRL(&tmp, 0);
|
FreeCRL(tmp, 0);
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
newList = tmp.crlList;
|
newList = tmp->crlList;
|
||||||
|
|
||||||
/* swap lists */
|
/* swap lists */
|
||||||
tmp.crlList = crl->crlList;
|
tmp->crlList = crl->crlList;
|
||||||
crl->crlList = newList;
|
crl->crlList = newList;
|
||||||
|
|
||||||
UnLockMutex(&crl->crlLock);
|
UnLockMutex(&crl->crlLock);
|
||||||
|
|
||||||
FreeCRL(&tmp, 0);
|
FreeCRL(tmp, 0);
|
||||||
|
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user