diff options
| author | Lee *!* Clagett <code@leeclagett.com> | 2024-11-19 18:51:52 -0500 |
|---|---|---|
| committer | Lee *!* Clagett <code@leeclagett.com> | 2024-11-21 21:16:22 -0500 |
| commit | 74c313420c1d22c5c8eecb8430fd5fe7a89143d7 (patch) | |
| tree | 68768ed44162f9a1be68d8534a54b9a9d4ea5a6d /contrib | |
| parent | 58a1d54a4f90a235616ede3f8ebae2b8dca41589 (diff) | |
| download | monzero-core-74c313420c1d22c5c8eecb8430fd5fe7a89143d7.tar.gz monzero-core-74c313420c1d22c5c8eecb8430fd5fe7a89143d7.tar.xz monzero-core-74c313420c1d22c5c8eecb8430fd5fe7a89143d7.zip | |
Fix memcpy in byte_slice constructor
Diffstat (limited to 'contrib')
| -rw-r--r-- | contrib/epee/src/byte_slice.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/contrib/epee/src/byte_slice.cpp b/contrib/epee/src/byte_slice.cpp index 72aa39768..47d440dff 100644 --- a/contrib/epee/src/byte_slice.cpp +++ b/contrib/epee/src/byte_slice.cpp @@ -152,7 +152,11 @@ namespace epee { std::size_t space_needed = 0; for (const auto& source : sources) + { + if (std::numeric_limits<std::size_t>::max() - space_needed < source.size()) + throw std::bad_alloc{}; space_needed += source.size(); + } if (space_needed) { @@ -162,9 +166,9 @@ namespace epee for (const auto& source : sources) { + assert(source.size() <= out.size()); // see check above std::memcpy(out.data(), source.data(), source.size()); - if (out.remove_prefix(source.size()) < source.size()) - throw std::bad_alloc{}; // size_t overflow on space_needed + out.remove_prefix(source.size()); } storage_ = std::move(storage); } |
