URI: 
       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