emontnemery · GitHub

Bug report

Bug description:

There's a segmentation fault in Python 3.14.1 and 3.13.10 which doesn't happen in the previous point releases.

I'm sorry about the messy reproducer, the issue was noticed in a much larger program and this is what I ended up with after removing all the cruft.

seg_fault_issue_import.py:

import asyncio
import atexit
class OtherClass:
    __slots__ = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'
    def __init__(self):
        pass
def register_async_client_cleanup():
    def cleanup_wrapper():
        loop = asyncio.new_event_loop()
        loop.close()
    atexit.register(cleanup_wrapper)
register_async_client_cleanup()

seg_fault_debug.py:

from enum import StrEnum
from seg_fault_issue_import import OtherClass
class MyClass:
    def __init__(self):
        self.attr = OtherClass()
class MyEnum(StrEnum):
    ATTR = "attr"
mydata = MyClass()
setattr(mydata, MyEnum.ATTR, None)

Running seg_fault_debug.py causes a segmentation fault with Python 3.13.10 and 3.14.1:

$ python3 seg_fault_debug.py
Segmentation fault (core dumped)
Original reproducer

seg_fault_issue_import.py:

import asyncio
import atexit
from dataclasses import dataclass
@dataclass(slots=True)
class CPU:
    """CPU."""
    count: int | None = None
    frequency: float | None = None
    load_average: float | None = None
    per_cpu: list[float] | None = None
    power: float | None = None
    stats: float | None = None
    temperature: float | None = None
    times: float | None = None
    times_percent: float | None = None
def register_async_client_cleanup():
    def cleanup_wrapper():
        loop = asyncio.new_event_loop()
        loop.close()
    atexit.register(cleanup_wrapper)
register_async_client_cleanup()

seg_fault_debug.py:

from dataclasses import dataclass, field
from enum import StrEnum
from seg_fault_issue_import import CPU
@dataclass
class MyDataclass:
    attr: None = field(default_factory=CPU)
class MyEnum(StrEnum):
    ATTR = "attr"
mydata = MyDataclass()
setattr(mydata, MyEnum.ATTR, None)

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Linked PRs

Read the original on github.com ↗