Missing Py_SetStackPointer call in LIST_APPEND
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
L’issue est déjà liée à la PR gh-151538 ; examinez donc d’abord ce travail plutôt que de commencer indépendamment. Pour reproduire l’échec, exécutez l’exemple montré de compréhension de liste avec _testcapi.set_nomemory(2) dans une build de débogage, puis inspectez LIST_APPEND, _PyList_AppendTakeRef et _PyList_AppendTakeRefListResize ; le travail est terminé lorsque l’assertion de object.c ne se produit plus lorsque le redimensionnement échoue.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 20/100