Merge pull request #3289

4789f859 wipeable_string: don't try to wipe an empty buffer (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2018-02-20 17:48:16 +02:00
commit 854a87d633
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD

View File

@ -76,6 +76,7 @@ wipeable_string::~wipeable_string()
void wipeable_string::wipe() void wipeable_string::wipe()
{ {
if (!buffer.empty())
memwipe(buffer.data(), buffer.size() * sizeof(char)); memwipe(buffer.data(), buffer.size() * sizeof(char));
} }
@ -93,10 +94,12 @@ void wipeable_string::grow(size_t sz, size_t reserved)
size_t old_sz = buffer.size(); size_t old_sz = buffer.size();
std::unique_ptr<char[]> tmp{new char[old_sz]}; std::unique_ptr<char[]> tmp{new char[old_sz]};
memcpy(tmp.get(), buffer.data(), old_sz * sizeof(char)); memcpy(tmp.get(), buffer.data(), old_sz * sizeof(char));
if (old_sz > 0)
memwipe(buffer.data(), old_sz * sizeof(char)); memwipe(buffer.data(), old_sz * sizeof(char));
buffer.reserve(reserved); buffer.reserve(reserved);
buffer.resize(sz); buffer.resize(sz);
memcpy(buffer.data(), tmp.get(), old_sz * sizeof(char)); memcpy(buffer.data(), tmp.get(), old_sz * sizeof(char));
if (old_sz > 0)
memwipe(tmp.get(), old_sz * sizeof(char)); memwipe(tmp.get(), old_sz * sizeof(char));
} }