commit 0180abc1791a169cd6c493a922900b143492bb6e
parent 9a0cf6376989d72f297a3fb744f19912c24275b5
Author: SomberNight <somber.night@protonmail.com>
Date: Thu, 5 Apr 2018 16:12:34 +0200
blockchain.py: check header length
related: #4212
Diffstat:
1 file changed, 6 insertions(+), 0 deletions(-)
diff --git a/lib/blockchain.py b/lib/blockchain.py
@@ -40,6 +40,10 @@ def serialize_header(res):
return s
def deserialize_header(s, height):
+ if not s:
+ raise Exception('Invalid header: {}'.format(s))
+ if len(s) != 80:
+ raise Exception('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])
@@ -255,6 +259,8 @@ class Blockchain(util.PrintError):
with open(name, 'rb') as f:
f.seek(delta * 80)
h = f.read(80)
+ if len(h) < 80:
+ raise Exception('Expected to read a full header. This was only {} bytes'.format(len(h)))
elif not os.path.exists(util.get_headers_dir(self.config)):
raise Exception('Electrum datadir does not exist. Was it deleted while running?')
else: