diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-12-09 10:46:55 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-12-09 10:46:55 +0100 |
commit | 70fdb815d692531d78e94d78e26938de2065c30b (patch) | |
tree | 19c2a82142a8dfaf58599527e961dc119c6600a0 | |
parent | 0f15b405cad738460a8126bf9ef689ec3edfd094 (diff) |
Avoid nullptr memcpy argument.
3 files changed, 9 insertions, 3 deletions
diff --git a/searchlib/src/vespa/searchlib/tensor/small_subspaces_buffer_type.cpp b/searchlib/src/vespa/searchlib/tensor/small_subspaces_buffer_type.cpp index ba27f017022..6a71388a3b9 100644 --- a/searchlib/src/vespa/searchlib/tensor/small_subspaces_buffer_type.cpp +++ b/searchlib/src/vespa/searchlib/tensor/small_subspaces_buffer_type.cpp @@ -43,7 +43,9 @@ SmallSubspacesBufferType::destroyElements(void *buffer, ElemCount numElems) void SmallSubspacesBufferType::fallbackCopy(void *newBuffer, const void *oldBuffer, ElemCount numElems) { - memcpy(newBuffer, oldBuffer, numElems); + if (numElems > 0) { + memcpy(newBuffer, oldBuffer, numElems); + } const char *elem = static_cast<const char *>(oldBuffer); while (numElems >= getArraySize()) { _ops.copied_labels(unconstify(vespalib::ConstArrayRef<char>(elem, getArraySize()))); diff --git a/searchlib/src/vespa/searchlib/tensor/tensor_buffer_operations.cpp b/searchlib/src/vespa/searchlib/tensor/tensor_buffer_operations.cpp index 4f0db54ac2a..3a42b47ace3 100644 --- a/searchlib/src/vespa/searchlib/tensor/tensor_buffer_operations.cpp +++ b/searchlib/src/vespa/searchlib/tensor/tensor_buffer_operations.cpp @@ -134,7 +134,9 @@ TensorBufferOperations::store_tensor(ArrayRef<char> buf, const vespalib::eval::V } auto cells = tensor.cells(); assert(cells_size == cells.size); - memcpy(buf.data() + cells_start_offset, cells.data, cells_mem_size); + if (cells_mem_size > 0) { + memcpy(buf.data() + cells_start_offset, cells.data, cells_mem_size); + } if (cells_end_offset != store_end) { memset(buf.data() + cells_end_offset, 0, store_end - cells_end_offset); } diff --git a/vespalib/src/vespa/vespalib/datastore/unique_store_string_allocator.cpp b/vespalib/src/vespa/vespalib/datastore/unique_store_string_allocator.cpp index 9c639067615..3e2adf21619 100644 --- a/vespalib/src/vespa/vespalib/datastore/unique_store_string_allocator.cpp +++ b/vespalib/src/vespa/vespalib/datastore/unique_store_string_allocator.cpp @@ -53,7 +53,9 @@ UniqueStoreSmallStringBufferType::fallbackCopy(void *newBuffer, const void *oldB { static_assert(std::is_trivially_copyable<UniqueStoreSmallStringEntry>::value, "UniqueStoreSmallStringEntry must be trivially copyable"); - memcpy(newBuffer, oldBuffer, numElems); + if (numElems > 0) { + memcpy(newBuffer, oldBuffer, numElems); + } } void |