Skip to content

Fix various bugs in compiler pipeline from bug report #146442

@A0su

Description

@A0su

Bug report

Bug description:

This is a sub-issue of #146102, details copied from gist:

Compiler Pipeline (codegen + compile + symtable + flowgraph + assemble) | 6 FIX

codegen.c (6,632 lines) — 4 FIX

  1. NULL deref + ref leak in codegen_setup_annotations_scope (line 716-720): PyLong_FromLong result not NULL-checked, passed to ADDOP_LOAD_CONST which dereferences it. Also never DECREF'd even on success.
  2. Ref leak of mangled in codegen_nameop (line 3280): RETURN_IF_ERROR(scope) early-returns without DECREF'ing mangled from _PyCompile_MaybeMangle.
  3. : 7 macro sites between allocation and consumption can early-return, leaking mangled.
  4. Unchecked _PyCompile_PushFBlock in codegen_unwind_fblock_stack (line 669): Return value silently discarded, error lost, frame block stack left inconsistent.

compile.c (1,772 lines) — 1 FIX

  1. Ref leak of orig in _PyCompile_TweakInlinedComprehensionScopes (line 1096-1114): PyDict_GetItemRef returns new ref in orig, never DECREF'd on any path (success or error). Leaks on every inlined comprehension.

assemble.c (802 lines) — 1 FIX

  1. assemble_emit_instr returns ERROR without exception (line 420-421): Bytecode overflow check returns ERROR without PyErr_NoMemory() → SystemError.

symtable.c (3,355 lines) — 0 FIX (clean)

flowgraph.c (4,088 lines) — 0 FIX (clean)

CPython versions tested on:

CPython main branch

Operating systems tested on:

Windows

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    interpreter-core(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions