Segfault from `zoneinfo` with custom DateTime class
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con il reproducer minimo nel corpo dell’issue ed eseguilo con le versioni di CPython elencate per confermare il crash e gli offset incoerenti. Poi leggi le PR collegati gh-125345, gh-125824 e gh-139132; il lavoro è completato quando il reproducer non causa più un segmentation fault e produce un risultato stabile e corretto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- backend
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100