rocky/python-xdis

Cant xdis Python bytecode 3.9.0 (3425) - assertion error

Closed this issue · 2 comments

Description

cannot xdis Python bytecode 3.9.0

How to Reproduce

disasm -S -F extended a-issue438.pyc

Output Given

............

# Method Name:       copy_file_to_output_cache
# Filename:          <frozen depth_utils.output_utils>
# Argument count:    4
# Position-only argument count: 0
# Keyword-only arguments: 0
# Number of locals:  6
# Stack size:        10
# Flags:             0x62000043 (0x40000000 | 0x20000000 | 0x2000000 | NOFREE | NEWLOCALS | OPTIMIZED)
# First Line:        145
# Constants:
#    0: None
#    1: True
#    2: ('parents', 'exist_ok')
#    3: 'Failed to mkdir for '
#    4: '. Ignore error and continue. '
#    5: '.'
# Names:
#    0: Path
#    1: mkdir
#    2: Exception
#    3: logging
#    4: warn
#    5: str
#    6: shutil
#    7: copyfile
# Varnames:
#       in_file_path, job_id, output_dir, ext, err, out_file_path
# Positional arguments:
#       in_file_path, job_id, output_dir, ext
# Local variables:
#    4: err
#    5: out_file_path
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Scripts\pydisasm.exe\__main__.py", line 7, in <module>
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\click\core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\click\core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\click\core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\click\core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\xdis\bin\pydisasm.py", line 81, in main
    disassemble_file(path, sys.stdout, format, show_source=show_source)
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\xdis\disasm.py", line 371, in disassemble_file
    disco(
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\xdis\disasm.py", line 175, in disco
    disco_loop(
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\xdis\disasm.py", line 219, in disco_loop
    bytecode.dis(asm_format=asm_format, show_source=show_source) + "\n"
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\xdis\bytecode.py", line 519, in dis
    self.disassemble_bytes(
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\xdis\bytecode.py", line 708, in disassemble_bytes
    instr.disassemble(
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\xdis\instruction.py", line 347, in disassemble
    new_repr = opc.opcode_extended_fmt[opc.opname[op]](
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages\xdis\opcodes\format\extended.py", line 649, in extended_format_CALL_METHOD
    assert first_arg is not None
AssertionError

Expected behavior

no assertion error, full disasm printed out

Environment

python -V
Python 3.12.2


>pip show xdis
Name: xdis
Version: 6.1.1
Summary: Python cross-version byte-code library and disassembler
Home-page: https://github.com/rocky/python-xdis
Author:
Author-email: Rocky Bernstein <rb@dustyfeet.com>
License: GPL
Location: C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
Requires: click, six
Required-by:

-->

Workarounds

Use a non-extended format

Priority

Low

Additional Context

N/A

a-issue438.zip

Without bytecode attached, there's little I or someone else can do. A workaround it is to change format to something that does not use exeteded, e.g. disasm -S a-issue438.pyc

I"ve attached it (hte .pyc) in the first post - please find the last line
I did drag-n-drop to the edit pane not sure why GH rendered it that way...