🐛 if load data was larger then max size, incorrect resize would occur

This commit is contained in:
William Katz 2021-05-20 21:29:46 -07:00 committed by GitHub
parent 59417ccebf
commit 5a6ac776bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -31,13 +31,21 @@ struct User
* @param init_pass * @param init_pass
*/ */
User(uint32_t init_bal, uint64_t init_pass) : balance(init_bal), password(init_pass) {} User(uint32_t init_bal, uint64_t init_pass) : balance(init_bal), password(init_pass) {}
User(uint32_t init_bal, uint64_t init_pass, Json::Value&& log_j) : balance(init_bal), password(init_pass) User(uint32_t init_bal, uint64_t init_pass, Json::Value &&log_j) : balance(init_bal), password(init_pass)
{ {
if(log_j.size()) if (log_j.size())
{ {
log.data.resize(log_j.size()+pre_log_size); if (max_log_size > log_j.size() + pre_log_size)
log.end = log_j.size(); {
for(uint32_t i = 0; i < log_j.size() && i < max_log_size; ++i) log.data.resize(log_j.size() + pre_log_size);
log.end = log_j.size();
}
else
{
log.data.resize(max_log_size);
log.end = max_log_size;
}
for (uint32_t i = 0; i < log_j.size() && i < max_log_size; ++i)
{ {
log.data[i] = std::move(Transaction(log_j[i]["from"].asCString(), log_j[i]["to"].asCString(), log_j[i]["balance"].asUInt())); log.data[i] = std::move(Transaction(log_j[i]["from"].asCString(), log_j[i]["to"].asCString(), log_j[i]["balance"].asUInt()));
} }
@ -52,4 +60,4 @@ struct User
res["log"] = log.Serialize(); res["log"] = log.Serialize();
return res; return res;
} }
}; };