summaryrefslogtreecommitdiffstats
path: root/fnet
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahooinc.com>2022-05-04 14:44:29 +0000
committerTor Brede Vekterli <vekterli@yahooinc.com>2022-05-04 14:44:49 +0000
commit18056130b2c5947c759683c2b7d9dfba22b6b3cd (patch)
tree0a284da02e22b6c5c1c98b785bafae90f03bffff /fnet
parentd9ea4c99b13fa83a75bd8612d5f6c4d50510e3e9 (diff)
Avoid nullptr src/dest args to zero-sized memcpy
Diffstat (limited to 'fnet')
-rw-r--r--fnet/src/vespa/fnet/databuffer.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/fnet/src/vespa/fnet/databuffer.cpp b/fnet/src/vespa/fnet/databuffer.cpp
index 7820ae2dfcf..ecc352388a6 100644
--- a/fnet/src/vespa/fnet/databuffer.cpp
+++ b/fnet/src/vespa/fnet/databuffer.cpp
@@ -65,15 +65,18 @@ FNET_DataBuffer::DataToFree(uint32_t len)
bool
FNET_DataBuffer::Shrink(uint32_t newsize)
{
- if (GetBufSize() <= newsize || GetDataLen() > newsize) {
+ const auto data_len = GetDataLen();
+ if (GetBufSize() <= newsize || data_len > newsize) {
return false;
}
Alloc newBuf(Alloc::alloc(newsize));
- memcpy(newBuf.get(), _datapt, GetDataLen());
+ if (data_len > 0) [[likely]] {
+ memcpy(newBuf.get(), _datapt, data_len);
+ }
_ownedBuf.swap(newBuf);
_bufstart = static_cast<char *>(_ownedBuf.get());
- _freept = _bufstart + GetDataLen();
+ _freept = _bufstart + data_len;
_datapt = _bufstart;
_bufend = _bufstart + newsize;
return true;
@@ -94,7 +97,7 @@ FNET_DataBuffer::Pack(uint32_t needbytes)
bufsize *= 2;
Alloc newBuf(Alloc::alloc(bufsize));
- if (_datapt != nullptr) {
+ if (_datapt != nullptr) [[likely]] {
memcpy(newBuf.get(), _datapt, GetDataLen());
}
_ownedBuf.swap(newBuf);