chainside / btcpy

A Python3 SegWit-compliant library which provides tools to handle Bitcoin data structures in a simple fashion.
https://www.chainside.net
GNU Lesser General Public License v3.0
270 stars 73 forks source link

Error: StopIteration: Trying to shift empty string #22

Closed zzir closed 6 years ago

zzir commented 6 years ago

block 260066

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/btcpy/structs/block.py", line 35, in unhexlify
    return Block.deserialize(bytearray(unhexlify(string)))
  File "/usr/local/lib/python3.6/site-packages/btcpy/structs/block.py", line 41, in deserialize
    txns = parser.get_txns()
  File "/usr/local/lib/python3.6/site-packages/btcpy/lib/parsing.py", line 131, in get_txns
    txns.append(txns_parser.get_next_tx())
  File "/usr/local/lib/python3.6/site-packages/btcpy/lib/parsing.py", line 208, in get_next_tx
    txouts = self._txouts()
  File "/usr/local/lib/python3.6/site-packages/btcpy/lib/parsing.py", line 185, in _txouts
    return [self._txout(i) for i in range(self.parse_varint())]
  File "/usr/local/lib/python3.6/site-packages/btcpy/lib/parsing.py", line 185, in <listcomp>
    return [self._txout(i) for i in range(self.parse_varint())]
  File "/usr/local/lib/python3.6/site-packages/btcpy/lib/parsing.py", line 181, in _txout
    script = ScriptBuilder.identify(self >> self.parse_varint())
  File "/usr/local/lib/python3.6/site-packages/btcpy/structs/script.py", line 1231, in identify
    candidate = script_type(Script(raw_script))
  File "/usr/local/lib/python3.6/site-packages/btcpy/structs/script.py", line 800, in __init__
    object.__setattr__(self, 'data', self.verify(param.body))
  File "/usr/local/lib/python3.6/site-packages/btcpy/structs/script.py", line 519, in verify
    args = [data for data in parser.match(cls.template)]
  File "/usr/local/lib/python3.6/site-packages/btcpy/lib/parsing.py", line 257, in match
    pushes.append(self.require_push(op[1:-1]))
  File "/usr/local/lib/python3.6/site-packages/btcpy/lib/parsing.py", line 291, in require_push
    push_data = self.get_push()
  File "/usr/local/lib/python3.6/site-packages/btcpy/lib/parsing.py", line 315, in get_push
    curr_op = next(self)
  File "/usr/local/lib/python3.6/site-packages/btcpy/lib/parsing.py", line 64, in __next__
    return (self >> 1)[0]
  File "/usr/local/lib/python3.6/site-packages/btcpy/lib/parsing.py", line 49, in __rshift__
    raise StopIteration('Trying to shift empty string')
StopIteration: Trying to shift empty string
SimoneBronzini commented 6 years ago

Hi, thanks for the report! The version currently on this GitHub repo already has the issue fixed (fixed in d8e5aa93066ccff09e337ede63ab83dd16462807). It will be included in the next pypi version!