From 5a4d8b8a198e18d01f2e0d5b75568cfd17acfa6e Mon Sep 17 00:00:00 2001 From: Thomas Kowalski Date: Mon, 9 Mar 2026 15:43:13 +0100 Subject: [PATCH 1/3] fix: reset list allocated to 0 --- Objects/listobject.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Objects/listobject.c b/Objects/listobject.c index 4a98c8e54ab03f..50fd30fdf3f991 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -3260,6 +3260,7 @@ _PyList_AsTupleAndClear(PyListObject *self) Py_ssize_t size = Py_SIZE(self); self->ob_item = NULL; Py_SET_SIZE(self, 0); + self->allocated = 0; ret = _PyTuple_FromArraySteal(items, size); free_list_items(items, false); Py_END_CRITICAL_SECTION(); From 22cc928880ba304ffe4bb04c6ced6ca0e532a851 Mon Sep 17 00:00:00 2001 From: Thomas Kowalski Date: Wed, 11 Mar 2026 11:22:13 +0100 Subject: [PATCH 2/3] refactor: only use SET_SIZE, don't touch buffer metadata --- Objects/listobject.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/Objects/listobject.c b/Objects/listobject.c index 50fd30fdf3f991..901f5343682a9d 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -3258,9 +3258,7 @@ _PyList_AsTupleAndClear(PyListObject *self) Py_BEGIN_CRITICAL_SECTION(self); PyObject **items = self->ob_item; Py_ssize_t size = Py_SIZE(self); - self->ob_item = NULL; Py_SET_SIZE(self, 0); - self->allocated = 0; ret = _PyTuple_FromArraySteal(items, size); free_list_items(items, false); Py_END_CRITICAL_SECTION(); From 6fe0c5c4436876df20e4540f4635a7edad3ec726 Mon Sep 17 00:00:00 2001 From: Thomas Kowalski Date: Wed, 11 Mar 2026 11:59:44 +0100 Subject: [PATCH 3/3] fix: do not call free_list_items --- Objects/listobject.c | 1 - 1 file changed, 1 deletion(-) diff --git a/Objects/listobject.c b/Objects/listobject.c index 901f5343682a9d..44c2545950cb87 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -3260,7 +3260,6 @@ _PyList_AsTupleAndClear(PyListObject *self) Py_ssize_t size = Py_SIZE(self); Py_SET_SIZE(self, 0); ret = _PyTuple_FromArraySteal(items, size); - free_list_items(items, false); Py_END_CRITICAL_SECTION(); return ret; }