diff options
| author | Pieter Wuille <[email protected]> | 2016-12-09 16:14:48 -0800 |
|---|---|---|
| committer | Pieter Wuille <[email protected]> | 2016-12-09 16:14:54 -0800 |
| commit | 815640ec6af9a38d6a2da4a4400056e2f4105080 (patch) | |
| tree | 582aa4cbf6f7ffd507be728887f2c5538bad919e | |
| parent | Merge #9303: Update comments in ctaes (diff) | |
| parent | [QA] add fundrawtransaction test on a locked wallet with empty keypool (diff) | |
| download | discoin-815640ec6af9a38d6a2da4a4400056e2f4105080.tar.xz discoin-815640ec6af9a38d6a2da4a4400056e2f4105080.zip | |
Merge #9295: [Wallet] Bugfix: Fundrawtransaction: don't terminate when keypool is empty
1a6eacb [QA] add fundrawtransaction test on a locked wallet with empty keypool (Jonas Schnelli)
c24a4f5 [Wallet] Bugfix: FRT: don't terminate when keypool is empty (Jonas Schnelli)
| -rwxr-xr-x | qa/rpc-tests/fundrawtransaction.py | 17 | ||||
| -rw-r--r-- | src/wallet/wallet.cpp | 6 |
2 files changed, 22 insertions, 1 deletions
diff --git a/qa/rpc-tests/fundrawtransaction.py b/qa/rpc-tests/fundrawtransaction.py index 8c45578fc..0dcca4cb5 100755 --- a/qa/rpc-tests/fundrawtransaction.py +++ b/qa/rpc-tests/fundrawtransaction.py @@ -484,6 +484,23 @@ class RawTransactionsTest(BitcoinTestFramework): self.is_network_split=False self.sync_all() + # drain the keypool + self.nodes[1].getnewaddress() + inputs = [] + outputs = {self.nodes[0].getnewaddress():1.1} + rawTx = self.nodes[1].createrawtransaction(inputs, outputs) + # fund a transaction that requires a new key for the change output + # creating the key must be impossible because the wallet is locked + try: + fundedTx = self.nodes[1].fundrawtransaction(rawTx) + raise AssertionError("Wallet unlocked without passphrase") + except JSONRPCException as e: + assert('Keypool ran out' in e.error['message']) + + #refill the keypool + self.nodes[1].walletpassphrase("test", 100) + self.nodes[1].walletlock() + try: self.nodes[1].sendtoaddress(self.nodes[0].getnewaddress(), 1.2) raise AssertionError("Wallet unlocked without passphrase") diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 638fca991..00e97d3c7 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2389,7 +2389,11 @@ bool CWallet::CreateTransaction(const vector<CRecipient>& vecSend, CWalletTx& wt CPubKey vchPubKey; bool ret; ret = reservekey.GetReservedKey(vchPubKey); - assert(ret); // should never fail, as we just unlocked + if (!ret) + { + strFailReason = _("Keypool ran out, please call keypoolrefill first"); + return false; + } scriptChange = GetScriptForDestination(vchPubKey.GetID()); } |