python / python/cpython

Type cache can expose previous values during finalization of an object

Abierto
#118,492 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

type-bug
Lenguaje dominante
Python
Estrellas
77.2k
Forks
36k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

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

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Empieza ejecutando el reproducer en CPython main y compara la búsqueda de atributos con el mapeo de tipos durante el destructor desencadenado por la asignación. Sigue la invalidación de la caché de tipos y la secuencia de finalización; el trabajo estará terminado cuando el ejemplo imprima True de forma consistente sin exponer el estado inconsistente.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
backend
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.