CensoredUsername / unrpyc

A ren'py script decompiler
Other
837 stars 149 forks source link

Failed to decompile error IndexError: string index out of range #75

Closed shahidcodes closed 5 years ago

shahidcodes commented 5 years ago

File which failed to decompile - files.zip

Stack Trace -

Error while decompiling C:\Users\Test\Desktop\x-rewards.rpyc:
Traceback (most recent call last):
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\unrpyc.py", line 136, in worker
    no_pyexpr=args.no_pyexpr, comparable=args.comparable, translator=translator, init_offset=args.init_offset)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\unrpyc.py", line 109, in decompile_rpyc
    translator=translator, init_offset=init_offset)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\__init__.py", line 46, in pprint
    decompile_python=decompile_python, translator=translator).dump(ast, indent_level, init_offset)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\__init__.py", line 89, in dump
    super(Decompiler, self).dump(ast, indent_level, skip_indent_until_write=True)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\util.py", line 29, in dump
    self.print_nodes(ast)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\util.py", line 120, in print_nodes
    self.print_node(node)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\__init__.py", line 106, in print_node
    self.dispatch.get(type(ast), type(self).print_unknown)(self, ast)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\__init__.py", line 589, in print_init
    self.print_nodes(ast.block)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\util.py", line 120, in print_nodes
    self.print_node(node)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\__init__.py", line 106, in print_node
    self.dispatch.get(type(ast), type(self).print_unknown)(self, ast)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\__init__.py", line 834, in print_screen
    self.printlock)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\sl2decompiler.py", line 38, in pprint
    ast, indent_level, linenumber, skip_indent_until_write)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\util.py", line 29, in dump
    self.print_nodes(ast)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\util.py", line 120, in print_nodes
    self.print_node(node)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\sl2decompiler.py", line 53, in print_node
    self.dispatch.get(type(ast), type(self).print_unknown)(self, ast)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\sl2decompiler.py", line 69, in print_screen
    ast.children, ast.location[1])
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\sl2decompiler.py", line 298, in print_keywords_and_children
    self.print_nodes(children_after_keywords, 0 if has_block else 1)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\util.py", line 120, in print_nodes
    self.print_node(node)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\sl2decompiler.py", line 53, in print_node
    self.dispatch.get(type(ast), type(self).print_unknown)(self, ast)
  File "C:\Users\Test\Downloads\unrpyc-dev\unrpyc-dev\decompiler\sl2decompiler.py", line 132, in print_python
    if code[0] == "\n":
IndexError: string index out of range

Decompilation of 1 file failed

@CensoredUsername @jackmcbarn

CensoredUsername commented 5 years ago

Thanks for the bug report. Looking at the stack trace it seems we don't handle the case where, for some reason, an empty single line python statement is present. I didn't know ren'py allowed those, interesting.

I'll push a fix soon.

CensoredUsername commented 5 years ago

I've pushed a fix in 07b3d03 for this issue. Could you confirm that it resolves the issue?

shahidcodes commented 5 years ago

Yeah I was able to decompile without any issue. Thanks @CensoredUsername