From e7f00cd14f6a0c0dee6e733ac3e2c5d92e0809bb Mon Sep 17 00:00:00 2001 From: Sergey Miryanov Date: Sun, 16 Feb 2025 19:00:03 +0500 Subject: [PATCH] gh-130179: Fix `persistent_{id,load}_attr` reference leaks in `_pickle` (#130180) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> --- Modules/_pickle.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 5641f93391c5..23a58d381556 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -4725,6 +4725,7 @@ Pickler_clear(PicklerObject *self) Py_CLEAR(self->output_buffer); Py_CLEAR(self->write); Py_CLEAR(self->persistent_id); + Py_CLEAR(self->persistent_id_attr); Py_CLEAR(self->dispatch_table); Py_CLEAR(self->fast_memo); Py_CLEAR(self->reducer_override); @@ -4754,6 +4755,7 @@ Pickler_traverse(PicklerObject *self, visitproc visit, void *arg) Py_VISIT(Py_TYPE(self)); Py_VISIT(self->write); Py_VISIT(self->persistent_id); + Py_VISIT(self->persistent_id_attr); Py_VISIT(self->dispatch_table); Py_VISIT(self->fast_memo); Py_VISIT(self->reducer_override); @@ -7227,6 +7229,7 @@ Unpickler_clear(UnpicklerObject *self) Py_CLEAR(self->peek); Py_CLEAR(self->stack); Py_CLEAR(self->persistent_load); + Py_CLEAR(self->persistent_load_attr); Py_CLEAR(self->buffers); if (self->buffer.buf != NULL) { PyBuffer_Release(&self->buffer); @@ -7266,6 +7269,7 @@ Unpickler_traverse(UnpicklerObject *self, visitproc visit, void *arg) Py_VISIT(self->peek); Py_VISIT(self->stack); Py_VISIT(self->persistent_load); + Py_VISIT(self->persistent_load_attr); Py_VISIT(self->buffers); PyObject **memo = self->memo; if (memo) { -- 2.47.3