tclose connection if server sends invalid headers - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 311f9eda170531db8baddca0ef43eb50f3039e96 DIR parent 94f7a87e4773f605a8ad9e72c1d96c882ec6c05d HTML Author: ThomasV <thomasv@electrum.org> Date: Wed, 26 Jul 2017 14:55:39 +0200 close connection if server sends invalid headers Diffstat: M lib/network.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) --- DIR diff --git a/lib/network.py b/lib/network.py t@@ -830,6 +830,9 @@ class Network(util.DaemonThread): interface.bad_header = header if interface.bad != interface.good + 1: next_height = (interface.bad + interface.good) // 2 + elif not interface.blockchain.can_connect(interface.bad_header, check_height=False): + self.connection_down(interface.server) + next_height = None else: branch = self.blockchains.get(interface.bad) if branch is not None: t@@ -853,14 +856,13 @@ class Network(util.DaemonThread): next_height = None if bh > interface.good: if not interface.blockchain.check_header(interface.bad_header): - if interface.blockchain.can_connect(interface.bad_header, check_height=False): - b = interface.blockchain.fork(interface.bad_header) - self.blockchains[interface.bad] = b - interface.blockchain = b - interface.print_error("new chain", b.checkpoint) - interface.mode = 'catch_up' - next_height = interface.bad + 1 - interface.blockchain.catch_up = interface.server + b = interface.blockchain.fork(interface.bad_header) + self.blockchains[interface.bad] = b + interface.blockchain = b + interface.print_error("new chain", b.checkpoint) + interface.mode = 'catch_up' + next_height = interface.bad + 1 + interface.blockchain.catch_up = interface.server else: assert bh == interface.good if interface.blockchain.catch_up is None and bh < interface.tip: