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