Segfault from `zoneinfo` with custom DateTime class
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 36k
- PR merge metrics
- PR metrics pending
Description
Crash report
What happened?
Here's a minimal reproducer
import zoneinfo
from datetime import date
class MyDateTime:
def __init__(
self,
year: int,
month: int,
day: int,
hour: int = 0,
minute: int = 0,
second: int = 0,
) -> None:
self.ordinal = date(year, month, day).toordinal()
self.hour = hour
self.minute = minute
self.second = second
def toordinal(self) -> int:
return self.ordinal
def whoopsie():
tz_berlin = zoneinfo.ZoneInfo("Europe/Berlin")
dt = MyDateTime(1995, 9, 2, 14, 34, 56)
print(tz_berlin.utcoffset(dt), flush=True)
If I run whoopsie, I get one of the following outcomes:
- It prints
02:00:00 - It prints
01:00:00 - It prints
00:53:28 - It segfaults
<project dir>/venv313/bin/python -X dev <project dir>/segfault.py
Fatal Python error: Segmentation fault
Current thread 0x00007fd62be47b80 (most recent call first):
File "<project dir>/segfault.py", line 27 in whoopsie
File "<project dir>/segfault.py", line 34 in <module>
I've tried running the test in a loop and it seems to always spit out the same result within a single run. So I assume some global state, memory layout, or or such is involved.
CPython versions tested on:
3.9, 3.13
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
Python 3.13.0 (main, Oct 10 2024, 13:32:18) [GCC 11.4.0]
Linked PRs
- gh-125345
- gh-125824
- gh-139132
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the minimal reproducer in the issue body and run it under the listed CPython versions to confirm the crash and inconsistent offsets. Then read linked PRs gh-125345, gh-125824, and gh-139132; the work is done when the reproducer no longer segfaults and produces a stable, correct result.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100