happyleavesaoc/aoc-mgz

construct.core.PaddingError: subcon parsed more bytes than was allowed by length

Closed this issue · 7 comments

I'm seeing the following error when parsing a match played today:

  File "/home/jnyman/Ubuntu/scripts/aoe2/replay_plotter/aoe2_plot.py", line 205, in parse_match
    container = mgz.body.operation.parse_stream(f)
  File "/home/jnyman/.local/lib/python3.9/site-packages/construct/core.py", line 171, in parse_stream
    return self._parse(stream, context2, "(parsing)")
  File "/home/jnyman/.local/lib/python3.9/site-packages/construct/core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "/home/jnyman/.local/lib/python3.9/site-packages/construct/core.py", line 867, in _parse
    subobj = sc._parse(stream, context, path)
  File "/home/jnyman/.local/lib/python3.9/site-packages/construct/core.py", line 295, in _parse
    return self.subcon._parse(stream, context, path)
  File "/home/jnyman/.local/lib/python3.9/site-packages/construct/core.py", line 2784, in _parse
    return self.subcon._parse(stream, context, path)
  File "/home/jnyman/.local/lib/python3.9/site-packages/construct/core.py", line 1594, in _parse
    obj = self.cases.get(key, self.default)._parse(stream, context, path)
  File "/home/jnyman/.local/lib/python3.9/site-packages/construct/core.py", line 2788, in _parse
    raise e.__class__("%s\n    %s" % (e, path))
construct.core.PaddingError: subcon parsed more bytes than was allowed by length
    (parsing) -> operation -> data -> action

Can you post the match?

@nymanjens fixed in 5697661, thanks for the report and sorry it took so long to fix.

Thanks!

I had the same problem.
I'm getting the same error with the latest source code after the bug was fixed.

command
import os
from mgz import header, body

with open('C:/Users/yoshi/Games/Age of Empires 2 DE/76561199387650333/savegame/error.aoe2record', 'rb') as data:
eof = os.fstat(data.fileno()).st_size
header.parse_stream(data)
body.meta.parse_stream(data)
while data.tell() < eof:
body.operation.parse_stream(data)

Traceback (most recent call last):
File "C:\Users\yoshi\AppData\Local\Programs\Python\Python311\Lib\site-packages\construct-2.8.16-py3.11.egg\construct\core.py", line 2784, in _parse
File "C:\Users\yoshi\AppData\Local\Programs\Python\Python311\Lib\site-packages\construct-2.8.16-py3.11.egg\construct\core.py", line 867, in _parse
File "C:\Users\yoshi\AppData\Local\Programs\Python\Python311\Lib\site-packages\construct-2.8.16-py3.11.egg\construct\core.py", line 1234, in _parse
construct.core.PaddingError: subcon parsed more bytes than was allowed by length

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "", line 6, in
File "C:\Users\yoshi\AppData\Local\Programs\Python\Python311\Lib\site-packages\construct-2.8.16-py3.11.egg\construct\core.py", line 171, in parse_stream
File "C:\Users\yoshi\AppData\Local\Programs\Python\Python311\Lib\site-packages\construct-2.8.16-py3.11.egg\construct\core.py", line 2784, in _parse
File "C:\Users\yoshi\AppData\Local\Programs\Python\Python311\Lib\site-packages\construct-2.8.16-py3.11.egg\construct\core.py", line 867, in _parse
File "C:\Users\yoshi\AppData\Local\Programs\Python\Python311\Lib\site-packages\construct-2.8.16-py3.11.egg\construct\core.py", line 295, in _parse
File "C:\Users\yoshi\AppData\Local\Programs\Python\Python311\Lib\site-packages\construct-2.8.16-py3.11.egg\construct\core.py", line 2784, in _parse
File "C:\Users\yoshi\AppData\Local\Programs\Python\Python311\Lib\site-packages\construct-2.8.16-py3.11.egg\construct\core.py", line 1594, in _parse
File "C:\Users\yoshi\AppData\Local\Programs\Python\Python311\Lib\site-packages\construct-2.8.16-py3.11.egg\construct\core.py", line 2788, in _parse
construct.core.PaddingError: subcon parsed more bytes than was allowed by length
(parsing) -> operation -> data -> action

error.zip
Here is the replay file where the error occurs.

#92
Resolution