From e40b7c5584b1562ae961c0a8feaba0a684aee2e4 Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Thu, 25 Apr 2019 00:56:00 +0200 Subject: [PATCH] pytest: Add test_minconf_withdraw to reproduce issue #2518 Signed-off-by: Christian Decker --- tests/test_misc.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/test_misc.py b/tests/test_misc.py index 32e07f45b..70608dd67 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -482,6 +482,31 @@ def test_withdraw(node_factory, bitcoind): with pytest.raises(RpcError, match=r'Cannot afford transaction'): l1.rpc.withdraw(waddr, 'all') +@pytest.mark.xfail(strict=True) +def test_minconf_withdraw(node_factory, bitcoind): + """Issue 2518: ensure that ridiculous confirmation levels don't overflow + + The number of confirmations is used to compute a maximum height that is to + be accepted. If the current height is smaller than the number of + confirmations we wrap around and just select everything. The fix is to + clamp the maxheight parameter to a positive small number. + + """ + amount = 1000000 + # Don't get any funds from previous runs. + l1 = node_factory.get_node(random_hsm=True) + addr = l1.rpc.newaddr()['bech32'] + + # Add some funds to withdraw later + for i in range(10): + l1.bitcoin.rpc.sendtoaddress(addr, amount / 10**8 + 0.01) + + bitcoind.generate_block(1) + + wait_for(lambda: len(l1.rpc.listfunds()['outputs']) == 10) + with pytest.raises(RpcError): + l1.rpc.withdraw(destination=addr, satoshi=10000, feerate='normal', minconf=9999999) + def test_addfunds_from_block(node_factory, bitcoind): """Send funds to the daemon without telling it explicitly