tnetwork: disconnect from server on incorrect header length - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit b44aca1654e0d2571e7af0f3bb20d7d2ed2ea7b1 DIR parent 87f6aa09df702aed26b70cb386c703f39c3fb4df HTML Author: SomberNight <somber.night@protonmail.com> Date: Fri, 13 Jul 2018 18:11:48 +0200 network: disconnect from server on incorrect header length fix #4522 Diffstat: M electrum/blockchain.py | 6 ++++-- M electrum/network.py | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) --- DIR diff --git a/electrum/blockchain.py b/electrum/blockchain.py t@@ -34,6 +34,8 @@ MAX_TARGET = 0x00000000FFFF0000000000000000000000000000000000000000000000000000 class MissingHeader(Exception): pass +class InvalidHeader(Exception): + pass def serialize_header(res): s = int_to_hex(res.get('version'), 4) \ t@@ -46,9 +48,9 @@ def serialize_header(res): def deserialize_header(s, height): if not s: - raise Exception('Invalid header: {}'.format(s)) + raise InvalidHeader('Invalid header: {}'.format(s)) if len(s) != 80: - raise Exception('Invalid header length: {}'.format(len(s))) + raise InvalidHeader('Invalid header length: {}'.format(len(s))) hex_to_int = lambda s: int('0x' + bh2u(s[::-1]), 16) h = {} h['version'] = hex_to_int(s[0:4]) DIR diff --git a/electrum/network.py b/electrum/network.py t@@ -47,6 +47,7 @@ from .interface import Connection, Interface from . import blockchain from .version import ELECTRUM_VERSION, PROTOCOL_VERSION from .i18n import _ +from .blockchain import InvalidHeader NODES_RETRY_INTERVAL = 60 t@@ -1075,7 +1076,11 @@ class Network(util.DaemonThread): # no point in keeping this connection without headers sub self.connection_down(interface.server) return - header = blockchain.deserialize_header(util.bfh(header_hex), height) + try: + header = blockchain.deserialize_header(util.bfh(header_hex), height) + except InvalidHeader: + self.connection_down(interface.server) + return if height < self.max_checkpoint(): self.connection_down(interface.server) return