commit b44aca1654e0d2571e7af0f3bb20d7d2ed2ea7b1
parent 87f6aa09df702aed26b70cb386c703f39c3fb4df
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:
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/electrum/blockchain.py b/electrum/blockchain.py
@@ -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) \
@@ -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])
diff --git a/electrum/network.py b/electrum/network.py
@@ -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
@@ -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