commit 0a3d74de8f2fa8eece37f4b728fb62a5b0658418
parent 25a2ceda237768c692fe9220efd05398d62d6a57
Author: Neil Booth <kyuupichan@gmail.com>
Date: Sun, 20 Dec 2015 12:19:44 +0900
Avoid index-out-of-range
Also add sanity assertion
Diffstat:
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/lib/coinchooser.py b/lib/coinchooser.py
@@ -67,6 +67,7 @@ class CoinChooserBase(PrintError):
amounts = self.change_amounts(tx, len(change_addrs), fee_estimator,
dust_threshold)
assert min(amounts) >= 0
+ assert len(change_addrs) >= len(amounts)
# If change is above dust threshold after accounting for the
# size of the change output, add it to the transaction.
dust = sum(amount for amount in amounts if amount < dust_threshold)
diff --git a/lib/wallet.py b/lib/wallet.py
@@ -26,7 +26,7 @@ import json
import copy
from functools import partial
-from util import PrintError, profiler
+from util import NotEnoughFunds, PrintError, profiler
from bitcoin import *
from account import *
@@ -897,6 +897,10 @@ class Abstract_Wallet(PrintError):
if type == 'address':
assert is_address(data), "Address " + data + " is invalid!"
+ # Avoid index-out-of-range with coins[0] below
+ if not coins:
+ raise NotEnoughFunds()
+
for item in coins:
self.add_input_info(item)