diff options
author | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-05-04 14:44:29 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-05-04 14:44:49 +0000 |
commit | 18056130b2c5947c759683c2b7d9dfba22b6b3cd (patch) | |
tree | 0a284da02e22b6c5c1c98b785bafae90f03bffff /fnet | |
parent | d9ea4c99b13fa83a75bd8612d5f6c4d50510e3e9 (diff) |
Avoid nullptr src/dest args to zero-sized memcpy
Diffstat (limited to 'fnet')
-rw-r--r-- | fnet/src/vespa/fnet/databuffer.cpp | 11 |
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); |