mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-06 16:42:01 +02:00
Merge pull request #10035 from night1rider/allow-0-len-input-hash-update
Allow zero-length input in _wc_Hash_Grow and fix SHA Copy MAX32666
This commit is contained in:
@@ -98,6 +98,7 @@ jobs:
|
||||
'--enable-curve25519=nonblock --enable-ecc=nonblock --enable-sp=yes,nonblock CPPFLAGS="-DWOLFSSL_PUBLIC_MP -DWOLFSSL_DEBUG_NONBLOCK"',
|
||||
'--enable-certreq --enable-certext --enable-certgen --disable-secure-renegotiation-info CPPFLAGS="-DNO_TLS"',
|
||||
'--enable-ocsp --enable-ocsp-responder --enable-ocspstapling CPPFLAGS="-DWOLFSSL_NONBLOCK_OCSP" --enable-maxfragment',
|
||||
'--enable-all CPPFLAGS=-DWOLFSSL_HASH_KEEP',
|
||||
]
|
||||
name: make check
|
||||
if: github.repository_owner == 'wolfssl'
|
||||
|
||||
@@ -1956,9 +1956,14 @@ int _wc_Hash_Grow(byte** msg, word32* used, word32* len, const byte* in,
|
||||
{
|
||||
word32 usedSz = 0;
|
||||
|
||||
if (inSz <= 0 || !WC_SAFE_SUM_WORD32(*used, (word32)inSz, usedSz))
|
||||
if (inSz < 0 || !WC_SAFE_SUM_WORD32(*used, (word32)inSz, usedSz))
|
||||
return BAD_FUNC_ARG;
|
||||
|
||||
/* Allow zero-length input as a no-op. Some callers may pass zero-length
|
||||
* data during hash operations and this should not be treated as an error. */
|
||||
if (inSz == 0)
|
||||
return 0;
|
||||
|
||||
if (*len < usedSz) {
|
||||
if (*msg == NULL) {
|
||||
*msg = (byte*)XMALLOC(usedSz, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
|
||||
@@ -808,23 +808,26 @@ int wc_MXC_TPU_SHA_Copy(void* src, void* dst, word32 ctxSz,
|
||||
byte** dstMsg, word32* dstUsed, word32* dstLen,
|
||||
void* dstHeap, void* srcHeap)
|
||||
{
|
||||
byte* srcBuf;
|
||||
byte* srcBuf = NULL;
|
||||
|
||||
if (src == NULL || dst == NULL || dstMsg == NULL ||
|
||||
dstUsed == NULL || dstLen == NULL || ctxSz == 0) {
|
||||
return BAD_FUNC_ARG;
|
||||
}
|
||||
|
||||
srcBuf = *dstMsg;
|
||||
|
||||
/* Free existing dst msg buffer using dst's original heap */
|
||||
wc_MXC_TPU_SHA_Free(dstMsg, dstUsed, dstLen, dstHeap);
|
||||
|
||||
/* Shallow copy the full context struct */
|
||||
XMEMCPY(dst, src, ctxSz);
|
||||
|
||||
/* Deep copy src msg buffer if present, allocate using src's heap */
|
||||
if (srcBuf != NULL) {
|
||||
/* Deep copy src msg buffer if present. Since dstMsg points into the dst
|
||||
* struct, the XMEMCPY above overwrites it with the src's msg pointer.
|
||||
* Save that pointer, allocate a new buffer for dst, and copy the data.
|
||||
* Do NOT move srcBuf assignment before XMEMCPY - it must capture the
|
||||
* src msg pointer that lands in *dstMsg after the shallow copy. */
|
||||
if (*dstMsg != NULL) {
|
||||
srcBuf = *dstMsg;
|
||||
*dstMsg = (byte*)XMALLOC(*dstLen, srcHeap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
if (*dstMsg == NULL) {
|
||||
return MEMORY_E;
|
||||
|
||||
Reference in New Issue
Block a user