mirror of
https://github.com/monero-project/monero.git
synced 2024-12-25 12:39:23 -05:00
Fix memcpy in byte_slice constructor
This commit is contained in:
parent
893916ad09
commit
92de47fd37
@ -152,7 +152,11 @@ namespace epee
|
|||||||
{
|
{
|
||||||
std::size_t space_needed = 0;
|
std::size_t space_needed = 0;
|
||||||
for (const auto& source : sources)
|
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();
|
space_needed += source.size();
|
||||||
|
}
|
||||||
|
|
||||||
if (space_needed)
|
if (space_needed)
|
||||||
{
|
{
|
||||||
@ -162,9 +166,9 @@ namespace epee
|
|||||||
|
|
||||||
for (const auto& source : sources)
|
for (const auto& source : sources)
|
||||||
{
|
{
|
||||||
|
assert(source.size() <= out.size()); // see check above
|
||||||
std::memcpy(out.data(), source.data(), source.size());
|
std::memcpy(out.data(), source.data(), source.size());
|
||||||
if (out.remove_prefix(source.size()) < source.size())
|
out.remove_prefix(source.size());
|
||||||
throw std::bad_alloc{}; // size_t overflow on space_needed
|
|
||||||
}
|
}
|
||||||
storage_ = std::move(storage);
|
storage_ = std::move(storage);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user