Files
python-uncompyle6/test/simple_source/bug36/10_extended_arg_loop.py
rocky b83d6c64ed Python 3.6 control flow bug...
Much more is needed, but it's a start
2017-10-29 23:52:58 -04:00

50 lines
1.6 KiB
Python

# Bug in 3.6 has to do with parsing jumps where
# the offset is more than 256 bytes so an EXTENDED_ARG
# instruction is inserted. find_jump_targets() and
# detect_control_flow need to be able to work in the presence
# of EXTENDED_ARG.
# This is a problem theoretically in Python before 3.6
# but since offsets are very large it isn't noticed.
# Code is simplified from trepan2/trepan/cli.py
import sys
def main(dbg=None, sys_argv=list(sys.argv)):
if sys_argv:
mainpyfile = None
else:
mainpyfile = "10"
sys.path[0] = "20"
while True:
try:
if dbg.program_sys_argv and mainpyfile:
normal_termination = dbg.run_script(mainpyfile)
if not normal_termination: break
else:
dbg.core.execution_status = 'No program'
dbg.core.processor.process_commands()
pass
dbg.core.execution_status = 'Terminated'
dbg.intf[-1].msg("The program finished - quit or restart")
dbg.core.processor.process_commands()
except IOError:
break
except RuntimeError:
dbg.core.execution_status = 'Restart requested'
if dbg.program_sys_argv:
sys.argv = list(dbg.program_sys_argv)
part1 = ('Restarting %s with arguments:' %
dbg.core.filename(mainpyfile))
args = ' '.join(dbg.program_sys_argv[1:])
dbg.intf[-1].msg(args + part1)
else: break
except SystemExit:
break
pass
sys.argv = 5
return