From fd3e4abb4665075ed71ae3a64a1d825f87379048 Mon Sep 17 00:00:00 2001 From: Jacob Barthelmeh Date: Thu, 7 Nov 2019 11:36:20 -0700 Subject: [PATCH] handle case to avoid memcpy when staticmemory IO pool gives same buffer --- src/internal.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/internal.c b/src/internal.c index d6253d0c2..75ed97211 100644 --- a/src/internal.c +++ b/src/internal.c @@ -7651,6 +7651,16 @@ static WC_INLINE int GrowOutputBuffer(WOLFSSL* ssl, int size) tmp += align - hdrSz; #endif +#ifdef WOLFSSL_STATIC_MEMORY + /* can be from IO memory pool which does not need copy if same buffer */ + if (ssl->buffers.outputBuffer.length && + tmp == ssl->buffers.outputBuffer.buffer) { + ssl->buffers.outputBuffer.bufferSize = + size + ssl->buffers.outputBuffer.length; + return 0; + } +#endif + if (ssl->buffers.outputBuffer.length) XMEMCPY(tmp, ssl->buffers.outputBuffer.buffer, ssl->buffers.outputBuffer.length); @@ -7715,6 +7725,16 @@ int GrowInputBuffer(WOLFSSL* ssl, int size, int usedLength) tmp += align - hdrSz; #endif +#ifdef WOLFSSL_STATIC_MEMORY + /* can be from IO memory pool which does not need copy if same buffer */ + if (usedLength && tmp == ssl->buffers.inputBuffer.buffer) { + ssl->buffers.inputBuffer.bufferSize = size + usedLength; + ssl->buffers.inputBuffer.idx = 0; + ssl->buffers.inputBuffer.length = usedLength; + return 0; + } +#endif + if (usedLength) XMEMCPY(tmp, ssl->buffers.inputBuffer.buffer + ssl->buffers.inputBuffer.idx, usedLength);