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
Crash report
What happened?
(Edited by @ZeroIntensity) Shortened repro:
(Edited by @fxeqxmulfx) Use after free example:
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