Open ghost opened 8 years ago
Just in case the original site goes down:
I think the original error that was reported was directly related to bit fields. It is crashing in a different way for me now:
pfp -t tests/templates/SWFTemplate.bt ~/Downloads/membranes.swf
Traceback (most recent call last):
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 913, in _run
res = self._handle_node(self._ast, None, None, self._stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1065, in _handle_file_ast
self._handle_node(child, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1287, in _handle_decl
field._pfp__init(stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 83, in _pfp__init
self._pfp__interp._handle_node(decls, ctxt=self, stream=stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1584, in _handle_struct_decls
self._handle_node(decl, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2231, in _handle_if
return self._handle_node(node.iftrue, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2100, in _handle_compound
self._handle_node(child, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2307, in _handle_do_while
self._handle_node(node.stmt, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2100, in _handle_compound
self._handle_node(child, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1287, in _handle_decl
field._pfp__init(stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 83, in _pfp__init
self._pfp__interp._handle_node(decls, ctxt=self, stream=stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1584, in _handle_struct_decls
self._handle_node(decl, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2394, in _handle_switch
exec_case(idx, cases)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2343, in exec_case
self._handle_node(stmt, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1287, in _handle_decl
field._pfp__init(stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 83, in _pfp__init
self._pfp__interp._handle_node(decls, ctxt=self, stream=stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1584, in _handle_struct_decls
self._handle_node(decl, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1173, in _handle_decl
and prev.__class__.width == field.width
AttributeError: type object 'LINESTYLEARRAY' has no attribute 'width'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/james/__ws__/dev/pfp/venv3/bin/pfp", line 11, in <module>
load_entry_point('pfp', 'console_scripts', 'pfp')()
File "/home/james/__ws__/dev/pfp/pfp/__main__.py", line 55, in main
keep_successful=args.keep,
File "/home/james/__ws__/dev/pfp/pfp/__init__.py", line 91, in parse
printf=printf,
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 736, in parse
res = self._run(keep_successful)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 940, in _run
traceback,
File "/home/james/__ws__/dev/pfp/venv3/lib/python3.6/site-packages/six.py", line 692, in reraise
raise value.with_traceback(tb)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 913, in _run
res = self._handle_node(self._ast, None, None, self._stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1065, in _handle_file_ast
self._handle_node(child, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1287, in _handle_decl
field._pfp__init(stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 83, in _pfp__init
self._pfp__interp._handle_node(decls, ctxt=self, stream=stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1584, in _handle_struct_decls
self._handle_node(decl, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2231, in _handle_if
return self._handle_node(node.iftrue, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2100, in _handle_compound
self._handle_node(child, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2307, in _handle_do_while
self._handle_node(node.stmt, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2100, in _handle_compound
self._handle_node(child, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1287, in _handle_decl
field._pfp__init(stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 83, in _pfp__init
self._pfp__interp._handle_node(decls, ctxt=self, stream=stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1584, in _handle_struct_decls
self._handle_node(decl, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2394, in _handle_switch
exec_case(idx, cases)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 2343, in exec_case
self._handle_node(stmt, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1287, in _handle_decl
field._pfp__init(stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 83, in _pfp__init
self._pfp__interp._handle_node(decls, ctxt=self, stream=stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1584, in _handle_struct_decls
self._handle_node(decl, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1022, in _handle_node
res = self._node_switch[node.__class__](node, scope, ctxt, stream)
File "/home/james/__ws__/dev/pfp/pfp/interp.py", line 1173, in _handle_decl
and prev.__class__.width == field.width
pfp.errors.PfpError: AttributeError: type object 'LINESTYLEARRAY' has no attribute 'width'
Exception at tests/templates/SWFTemplate.bt:1078
Running with pdb:
$> python -m pdb pfp/__main__.py -t tests/templates/SWFTemplate.bt ~/Downloads/membranes.swf
...
> /home/james/__ws__/dev/pfp/pfp/interp.py(1173)_handle_decl()
-> and prev.__class__.width == field.width
(Pdb) field
<class 'pfp.fields.UChar'>
(Pdb) field.width
1
(Pdb) prev
<pfp.interp.LINESTYLEARRAY object at 0x7f1f474f59e8>
(Pdb) prev.__class__
<class 'pfp.interp.LINESTYLEARRAY'>
(Pdb) prev.__class__.width
*** AttributeError: type object 'LINESTYLEARRAY' has no attribute 'width'
When I attempt to pfp.parse a SWF with the SWFTemplate, i get an error message on line 1001: http://www.sweetscape.com/010editor/templates/files/SWFTemplate.bt Line 1001: if (StateFillStyle0) { int FillStyle0 : FillBits; ... Line 1012: ubyte NumFillBits : 4; Line 1014: FillBits = NumFillBits; Error num must be a multiple of 8
However, later in the file FillBits is defined. Also, when I open 010editor and run the template against the swf file it is applied successfully with no errors The SWF in question is at: http://www.bio.davidson.edu/people/macampbell/111/memb-swf/membranes.swf