Fix OPENSSL_ALL build with WOLFSSL_NO_REALLOC

This commit is contained in:
Lealem Amedie
2025-01-23 13:59:30 -07:00
parent dd2c5b1a4c
commit 49a74daebc
8 changed files with 93 additions and 5 deletions

View File

@@ -2770,9 +2770,21 @@ int wolfSSL_BIO_flush(WOLFSSL_BIO* bio)
}
else {
size_t currLen = XSTRLEN(b->ip);
#ifdef WOLFSSL_NO_REALLOC
char* tmp = NULL;
#endif
if (currLen != newLen) {
#ifdef WOLFSSL_NO_REALLOC
tmp = b->ip;
b->ip = (char*)XMALLOC(newLen+1, b->heap, DYNAMIC_TYPE_OPENSSL);
XMEMCPY(b->ip, tmp, newLen);
XFREE(tmp, b->heap, DYNAMIC_TYPE_OPENSSL);
tmp = NULL;
#else
b->ip = (char*)XREALLOC(b->ip, newLen + 1, b->heap,
DYNAMIC_TYPE_OPENSSL);
#endif
if (b->ip == NULL) {
WOLFSSL_MSG("Hostname realloc failed.");
return WOLFSSL_FAILURE;

View File

@@ -773,8 +773,18 @@ static char* expandValue(WOLFSSL_CONF *conf, const char* section,
/* This will allocate slightly more memory than necessary
* but better be safe */
strLen += valueLen;
#ifdef WOLFSSL_NO_REALLOC
newRet = (char*)XMALLOC(strLen + 1, NULL,
DYNAMIC_TYPE_OPENSSL);
if (newRet != NULL) {
XMEMCPY(newRet, ret, (strLen - valueLen) + 1);
XFREE(ret, NULL, DYNAMIC_TYPE_OPENSSL);
ret = NULL;
}
#else
newRet = (char*)XREALLOC(ret, strLen + 1, NULL,
DYNAMIC_TYPE_OPENSSL);
#endif
if (!newRet) {
WOLFSSL_MSG("realloc error");
goto expand_cleanup;

View File

@@ -39404,8 +39404,19 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
WOLFSSL_MSG("Found session matching the session id"
" found in the ticket");
/* Allocate and populate an InternalTicket */
#ifdef WOLFSSL_NO_REALLOC
tmp = (byte*)XMALLOC(sizeof(InternalTicket), ssl->heap,
DYNAMIC_TYPE_TLSX);
if (tmp != NULL)
{
XMEMCPY(tmp, psk->identity, psk->identityLen);
XFREE(psk->identity, ssl->heap, DYNAMIC_TYPE_TLSX);
psk->identity = NULL;
}
#else
tmp = (byte*)XREALLOC(psk->identity, sizeof(InternalTicket),
ssl->heap, DYNAMIC_TYPE_TLSX);
#endif
if (tmp != NULL) {
XMEMSET(tmp, 0, sizeof(InternalTicket));
psk->identity = tmp;

View File

@@ -518,8 +518,19 @@ static int der_to_enc_pem_alloc(unsigned char* der, int derSz,
byte *tmpBuf;
/* Add space for padding. */
#ifdef WOLFSSL_NO_REALLOC
tmpBuf = (byte*)XMALLOC((size_t)(derSz + blockSz), heap,
DYNAMIC_TYPE_TMP_BUFFER);
if (tmpBuf != NULL)
{
XMEMCPY(tmpBuf, der, (size_t)(derSz));
XFREE(der, heap, DYNAMIC_TYPE_TMP_BUFFER);
der = NULL;
}
#else
tmpBuf = (byte*)XREALLOC(der, (size_t)(derSz + blockSz), heap,
DYNAMIC_TYPE_TMP_BUFFER);
#endif
if (tmpBuf == NULL) {
WOLFSSL_ERROR_MSG("Extending DER buffer failed");
ret = 0; /* der buffer is free'd at the end of the function */

View File

@@ -24807,8 +24807,18 @@ int wolfSSL_BUF_MEM_grow_ex(WOLFSSL_BUF_MEM* buf, size_t len,
/* expand size, to handle growth */
mx = (len_int + 3) / 3 * 4;
#ifdef WOLFSSL_NO_REALLOC
tmp = (char*)XMALLOC(mx, NULL, DYNAMIC_TYPE_OPENSSL);
if (tmp != NULL) {
XMEMCPY(tmp, buf->data, len_int);
XFREE(buf->data, NULL, DYNAMIC_TYPE_OPENSSL);
buf->data = NULL;
}
#else
/* use realloc */
tmp = (char*)XREALLOC(buf->data, mx, NULL, DYNAMIC_TYPE_OPENSSL);
#endif
if (tmp == NULL) {
return 0; /* ERR_R_MALLOC_FAILURE; */
}
@@ -24850,7 +24860,18 @@ int wolfSSL_BUF_MEM_resize(WOLFSSL_BUF_MEM* buf, size_t len)
mx = ((int)len + 3) / 3 * 4;
/* We want to shrink the internal buffer */
#ifdef WOLFSSL_NO_REALLOC
tmp = (char*)XMALLOC(mx, NULL, DYNAMIC_TYPE_OPENSSL);
if (tmp != NULL )
{
XMEMCPY(tmp, buf->data, len);
XFREE(buf->data,NULL,DYNAMIC_TYPE_OPENSSL);
buf->data = NULL;
}
#else
tmp = (char*)XREALLOC(buf->data, mx, NULL, DYNAMIC_TYPE_OPENSSL);
#endif
if (tmp == NULL)
return 0;

View File

@@ -797,9 +797,18 @@ static int wolfssl_asn1_bit_string_grow(WOLFSSL_ASN1_BIT_STRING* bitStr,
int ret = 1;
byte* tmp;
#ifdef WOLFSSL_NO_REALLOC
tmp = (byte*)XMALLOC((size_t)len, NULL, DYNAMIC_TYPE_OPENSSL);
if (tmp != NULL) {
XMEMCPY(tmp, bitStr->data, bitStr->length);
XFREE(bitStr->data, NULL, DYNAMIC_TYPE_OPENSSL);
bitStr->data = NULL;
}
#else
/* Realloc to length required. */
tmp = (byte*)XREALLOC(bitStr->data, (size_t)len, NULL,
DYNAMIC_TYPE_OPENSSL);
#endif
if (tmp == NULL) {
ret = 0;
}

View File

@@ -1181,12 +1181,24 @@ WOLFSSL_X509_EXTENSION* wolfSSL_X509_set_ext(WOLFSSL_X509* x509, int loc)
}
}
ext->obj->objSz = (unsigned int)objSz;
if (((ext->obj->dynamic & WOLFSSL_ASN1_DYNAMIC_DATA) != 0) ||
(ext->obj->obj == NULL)) {
ext->obj->obj =(byte*)XREALLOC((byte*)ext->obj->obj,
ext->obj->objSz,
NULL,DYNAMIC_TYPE_ASN1);
#ifdef WOLFSSL_NO_REALLOC
byte* tmp = NULL;
tmp = (byte*)XMALLOC(objSz, NULL, DYNAMIC_TYPE_ASN1);
if (tmp != NULL && ext->obj->obj != NULL) {
XMEMCPY(tmp, ext->obj->obj, ext->obj->objSz);
XFREE((byte*)ext->obj->obj, NULL, DYNAMIC_TYPE_ASN1);
}
else if (tmp == NULL) {
ext->obj->obj = tmp;
}
ext->obj->obj = tmp;
#else
ext->obj->obj = (byte*)XREALLOC((byte*)ext->obj->obj, objSz,
NULL, DYNAMIC_TYPE_ASN1);
#endif
if (ext->obj->obj == NULL) {
wolfSSL_X509_EXTENSION_free(ext);
FreeDecodedCert(cert);
@@ -1201,6 +1213,8 @@ WOLFSSL_X509_EXTENSION* wolfSSL_X509_set_ext(WOLFSSL_X509* x509, int loc)
else {
ext->obj->dynamic &= ~WOLFSSL_ASN1_DYNAMIC_DATA;
}
ext->obj->objSz = (unsigned int)objSz;
/* Get OID from input and copy to ASN1_OBJECT buffer */
XMEMCPY(oidBuf+2, input+idx, length);
XMEMCPY((byte*)ext->obj->obj, oidBuf, ext->obj->objSz);

View File

@@ -76,7 +76,7 @@
#endif
#ifdef OPENSSL_ALL
#ifndef WOLFSSL_HAVE_BIO_ADDR
#if !defined(WOLFSSL_HAVE_BIO_ADDR) && !defined(WOLFSSL_NO_SOCK)
#define WOLFSSL_HAVE_BIO_ADDR
#endif
#if defined(WOLFSSL_DTLS) && !defined(WOLFSSL_DTLS_MTU)