Skip to content

Segmentation fault, possibly due to a GC issue (tp_subclasses)#135552

@fxeqxmulfx

Description

@fxeqxmulfx

Crash report

What happened?

fromtypingimportUnionclassBaseNode: next: Union["BaseNode", None] =None@staticmethoddefadd(node: "BaseNode") ->None: ifBaseNode.nextisNone: BaseNode.next=nodereturncurrent=BaseNode.nextwhilecurrent.nextisnotNone: current=current.nextcurrent.next=node@staticmethoddefremove(node: "BaseNode") ->None: ifBaseNode.nextisNone: returncurrent=BaseNode.nextprev=BaseNodewhileTrue: ifcurrentisNone: returnifcurrent==node: ifcurrent.nextisnotNone: prev.next=current.nextelse: prev.next=Nonereturnprev=currentcurrent=current.nextclassNode(BaseNode): def__init__(self) ->None: self.next=NoneBaseNode.add(self) def__del__(self) ->None: BaseNode.remove(self) defmain() ->None: Node() Node() if__name__=="__main__": main()

(Edited by @ZeroIntensity) Shortened repro:

classBaseNode: next=NoneclassNode(BaseNode): def__init__(self) ->None: ifBaseNode.nextisNone: BaseNode.next=selfreturnBaseNode.next.next=selfdef__del__(self) ->None: BaseNode.next=BaseNode.next.nextNode() Node()

(Edited by @fxeqxmulfx) Use after free example:

classBaseNode: def__del__(self): print("next", BaseNode.next) print("del", self) BaseNode.next=BaseNode() BaseNode.next.next=BaseNode()
next <__main__.BaseNode object at 0x717fb2d23a10> del <__main__.BaseNode object at 0x717fb2d23a10> next <__main__.BaseNode object at 0x717fb2d23a10> use after free del <__main__.BaseNode object at 0x717fb2d23a50> 

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Output from running 'python -VV' on the command line:

Python 3.14.0b2 (main, Jun 12 2025, 12:41:01) [Clang 20.1.4 ]

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.13bugs and security fixes3.14bugs and security fixes3.15new features, bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)type-crashA hard crash of the interpreter, possibly with a core dump

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions