Missing Py_SetStackPointer call in LIST_APPEND
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Bug report
Bug description:
In a debug build:
import _testcapi
_testcapi.set_nomemory(2)
result = [f'1{x}' for x in range(1)]
Assertion failed: (tstate->current_frame == NULL || tstate->current_frame->stackpointer != NULL), function _Py_Dealloc, file object.c, line 3298.
fish: Job 1, './python.exe test.py' terminated by signal SIGABRT (Abort)
LIST_APPEND op calls _PyList_AppendTakeRef without setting the stack frame, _PyList_AppendTakeRef calls _PyList_AppendTakeRefListResize with a stolen ref to newitem. If the list resize fails, then newitem is decref'd, which can cause a dealloc, which triggers the above assert on a debug build.
Unless there is a performance impact, then I'm assuming this is just a case of calling Py_SetStackPointer at the appropriate point?
Python 3.16.0a0 (heads/main-dirty:29a920e, Jun 9 2026, 00:36:55) [Clang 22.1.6 ]
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Linked PRs
- gh-151538
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
El issue ya está vinculado al PR gh-151538, así que revisa primero ese trabajo en lugar de empezar de forma independiente. Para reproducir el fallo, ejecuta el ejemplo mostrado de comprensión de listas con _testcapi.set_nomemory(2) en una compilación de depuración y, a continuación, inspecciona LIST_APPEND, _PyList_AppendTakeRef y _PyList_AppendTakeRefListResize; el trabajo estará completo cuando la aserción de object.c ya no se produzca cuando falle el redimensionamiento.
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
- 20/100