Check for overflow in IncrementAccountCounter().
This commit is contained in:
parent
8750178432
commit
0da6bcef72
|
@ -522,7 +522,11 @@ std::pair<UnifiedFullViewingKey, libzcash::AccountId> CWallet::GenerateNewUnifie
|
|||
while (true) {
|
||||
auto accountId = hdChain.GetAccountCounter();
|
||||
auto generated = GenerateUnifiedSpendingKeyForAccount(accountId);
|
||||
hdChain.IncrementAccountCounter();
|
||||
auto account = hdChain.IncrementAccountCounter();
|
||||
if (!account.has_value()) {
|
||||
throw std::runtime_error(
|
||||
"CWallet::GenerateNewUnifiedSpendingKey(): Account counter overflowed (2^31 - 1).");
|
||||
}
|
||||
|
||||
if (generated.has_value()) {
|
||||
// Update the persisted chain information
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "key.h"
|
||||
#include "keystore.h"
|
||||
#include "zcash/Address.hpp"
|
||||
#include "zcash/address/zip32.h"
|
||||
|
||||
#include <list>
|
||||
#include <stdint.h>
|
||||
|
@ -103,9 +104,16 @@ public:
|
|||
return accountCounter;
|
||||
}
|
||||
|
||||
void IncrementAccountCounter() {
|
||||
// TODO: We should check for overflow somewhere and handle it.
|
||||
accountCounter += 1;
|
||||
/** Increments the account counter by 1 and returns it. Returns std::nullopt
|
||||
* if the increment operation would cause an overflow. */
|
||||
std::optional<uint32_t> IncrementAccountCounter() {
|
||||
auto newAccountCounter = accountCounter + 1;
|
||||
if (newAccountCounter > (HARDENED_KEY_LIMIT - 1)) {
|
||||
return std::nullopt;
|
||||
} else {
|
||||
accountCounter = newAccountCounter;
|
||||
return newAccountCounter;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t GetLegacyTKeyCounter(bool external) {
|
||||
|
|
Loading…
Reference in New Issue