Type cache can expose previous values during finalization of an object
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug report
Bug description:
This should always print True, that is an attribute accessed from a class should match the value that's in the type's mappingproxy:
class X:
def __del__(inner_self):
v = C.a
print(v == C.__dict__['a'])
class C:
a = X()
# prime the cache
C.a
C.a
# destructor shouldn't be able to see inconsisent state
C.a = X()
C.a = X()
But this prints False because the destructor can be run when the assignment into the type dict occurs, but before the type version is invalidated.
CPython versions tested on:
3.8, CPython main branch
Operating systems tested on:
Linux
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, den Reproducer auf CPython main auszuführen und die Attributsuche während des durch die Zuweisung ausgelösten Destruktors mit der Typzuordnung zu vergleichen. Verfolge die Invalidierung des Typ-Caches und die Finalisierungssequenz; fertig ist die Aufgabe, wenn das Beispiel konsistent True ausgibt, ohne den inkonsistenten Zustand offenzulegen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- backend
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100