From 0a3d74de8f2fa8eece37f4b728fb62a5b0658418 Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Sun, 20 Dec 2015 12:19:44 +0900 Subject: [PATCH] Avoid index-out-of-range Also add sanity assertion --- lib/coinchooser.py | 1 + lib/wallet.py | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/coinchooser.py b/lib/coinchooser.py index 385adf326..4df77a80d 100644 --- 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 index 9717c9a0b..c22cb11a8 100644 --- 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)