tstricter tx deserialization: forbid junk at the end - electrum - Electrum Bitcoin wallet (HTM) git clone https://git.parazyd.org/electrum (DIR) Log (DIR) Files (DIR) Refs (DIR) Submodules --- (DIR) commit 71ce7cce6d192ac7dc7c4efc2240c9022b7b4ba6 (DIR) parent 0e8976856d520e9c623c56d3d6bb3c6450370c08 (HTM) Author: SomberNight <somber.night@protonmail.com> Date: Tue, 12 Jun 2018 10:51:51 +0200 stricter tx deserialization: forbid junk at the end Diffstat: M lib/transaction.py | 7 +++++++ 1 file changed, 7 insertions(+), 0 deletions(-) --- (DIR) diff --git a/lib/transaction.py b/lib/transaction.py t@@ -103,6 +103,11 @@ class BCDataStream(object): except IndexError: raise SerializationError("attempt to read past end of buffer") + def can_read_more(self) -> bool: + if not self.input: + return False + return self.read_cursor < len(self.input) + def read_boolean(self): return self.read_bytes(1)[0] != chr(0) def read_int16(self): return self._read_num('<h') def read_uint16(self): return self._read_num('<H') t@@ -568,6 +573,8 @@ def deserialize(raw: str, force_full_parse=False) -> dict: txin = d['inputs'][i] parse_witness(vds, txin, full_parse=full_parse) d['lockTime'] = vds.read_uint32() + if vds.can_read_more(): + raise SerializationError('extra junk at the end') return d