From 3892fb533ad2e7f19af384d68ec39b6d450db1a8 Mon Sep 17 00:00:00 2001 From: rocky Date: Tue, 10 Oct 2017 16:12:02 -0400 Subject: [PATCH] Misc bugs --- uncompyle6/parsers/parse24.py | 5 +++-- uncompyle6/scanners/scanner3.py | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/uncompyle6/parsers/parse24.py b/uncompyle6/parsers/parse24.py index 6c3006c8..cfba72dd 100644 --- a/uncompyle6/parsers/parse24.py +++ b/uncompyle6/parsers/parse24.py @@ -58,10 +58,11 @@ class Python24Parser(Python25Parser): if invalid or tokens is None: return invalid - # FiXME: this code never gets called... lhs = rule[0] if lhs == 'nop_stmt': - return not int(tokens[first].pattr) == tokens[last].offset + l = len(tokens) + if 0 <= l < len(tokens): + return not int(tokens[first].pattr) == tokens[last].offset return False diff --git a/uncompyle6/scanners/scanner3.py b/uncompyle6/scanners/scanner3.py index 47759f80..f2c40424 100644 --- a/uncompyle6/scanners/scanner3.py +++ b/uncompyle6/scanners/scanner3.py @@ -949,7 +949,7 @@ class Scanner3(Scanner): return pass pass - if code[pre_rtarget] == self.opc.RETURN_VALUE and self.version < 3.5: + if code[pre_rtarget] == self.opc.RETURN_VALUE: self.return_end_ifs.add(pre_rtarget) else: self.fixed_jumps[offset] = rtarget @@ -969,7 +969,7 @@ class Scanner3(Scanner): if target > next_offset: next_op = code[next_offset] if (self.opc.JUMP_ABSOLUTE == next_op and - END_FINALLY != code[xdis.next_offset(next_op, self.opc, next_offset)]): + self.opc.END_FINALLY != code[xdis.next_offset(next_op, self.opc, next_offset)]): self.fixed_jumps[next_offset] = target self.except_targets[target] = next_offset @@ -992,7 +992,8 @@ class Scanner3(Scanner): # misclassified as RETURN_END_IF. Handle that here. # In RETURN_VALUE, JUMP_ABSOLUTE, RETURN_VALUE is never RETURN_END_IF if op == self.opc.RETURN_VALUE: - if (offset+1 < len(code) and code[offset+1] == self.opc.JUMP_ABSOLUTE and + next_offset = xdis.next_offset(op, self.opc, offset) + if (next_offset < len(code) and code[next_offset] == self.opc.JUMP_ABSOLUTE and offset in self.return_end_ifs): self.return_end_ifs.remove(offset) pass