From: Sergey Miryanov Date: Sun, 16 Feb 2025 14:00:03 +0000 (+0500) Subject: gh-130179: Fix `persistent_{id,load}_attr` reference leaks in `_pickle` (#130180) X-Git-Tag: v3.14.0a6~400 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e7f00cd14f6a0c0dee6e733ac3e2c5d92e0809bb;p=thirdparty%2FPython%2Fcpython.git gh-130179: Fix `persistent_{id,load}_attr` reference leaks in `_pickle` (#130180) Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> --- 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) {