diff options
author | Matt Corallo <git@bluematt.me> | 2017-07-11 12:15:02 -0400 |
---|---|---|
committer | Matt Corallo <git@bluematt.me> | 2017-07-17 12:12:48 -0400 |
commit | 1fc8c3de0cff2971cc1f9903bfc3d03a982f2fab (patch) | |
tree | 90ef1ee9bbdcc8f90231635a71b63b9234e2a7d7 /src/wallet/wallet.h | |
parent | 0b019357ff09e7a522307fc271d6b60562a7b890 (diff) |
No longer ever reuse keypool indexes
This fixes an issue where you could reserve a keypool entry, then
top up the keypool, writing out a new key at the given index, then
return they key from the pool. This isnt likely to cause issues,
but given there is no reason to ever re-use keypool indexes
(they're 64 bits...), best to avoid it alltogether.
Diffstat (limited to 'src/wallet/wallet.h')
-rw-r--r-- | src/wallet/wallet.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 06937566b0..574fd8710d 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -701,6 +701,7 @@ private: std::set<int64_t> setInternalKeyPool; std::set<int64_t> setExternalKeyPool; + int64_t m_max_keypool_index; int64_t nTimeFirstKey; @@ -743,13 +744,14 @@ public: } } - void LoadKeyPool(int nIndex, const CKeyPool &keypool) + void LoadKeyPool(int64_t nIndex, const CKeyPool &keypool) { if (keypool.fInternal) { setInternalKeyPool.insert(nIndex); } else { setExternalKeyPool.insert(nIndex); } + m_max_keypool_index = std::max(m_max_keypool_index, nIndex); // If no metadata exists yet, create a default with the pool key's // creation time. Note that this may be overwritten by actually @@ -795,6 +797,7 @@ public: nAccountingEntryNumber = 0; nNextResend = 0; nLastResend = 0; + m_max_keypool_index = 0; nTimeFirstKey = 0; fBroadcastTransactions = false; nRelockTime = 0; |