From a676ed72e5dfc5149a19ec5214aff42b2214788b Mon Sep 17 00:00:00 2001 From: Shantanu <12621235+hauntsaninja@users.noreply.github.com> Date: Sun, 6 Nov 2022 06:05:13 -0800 Subject: [PATCH] gh-83004: Clean up refleak in _pickle initialisation (GH-98841) (cherry picked from commit d3b82b4463c4eb51954c0afd98342f0c5e479baa) Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com> --- .../2022-11-02-05-53-25.gh-issue-83004.qc_KHr.rst | 1 + Modules/_pickle.c | 13 ++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2022-11-02-05-53-25.gh-issue-83004.qc_KHr.rst diff --git a/Misc/NEWS.d/next/Library/2022-11-02-05-53-25.gh-issue-83004.qc_KHr.rst b/Misc/NEWS.d/next/Library/2022-11-02-05-53-25.gh-issue-83004.qc_KHr.rst new file mode 100644 index 00000000000000..de00063420638a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-11-02-05-53-25.gh-issue-83004.qc_KHr.rst @@ -0,0 +1 @@ +Clean up refleaks on failed module initialisation in in :mod:`_pickle` diff --git a/Modules/_pickle.c b/Modules/_pickle.c index b4b1dda199c23a..721079c91f5f2c 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -7998,16 +7998,15 @@ PyInit__pickle(void) if (st->UnpicklingError == NULL) return NULL; - Py_INCREF(st->PickleError); - if (PyModule_AddObject(m, "PickleError", st->PickleError) < 0) + if (PyModule_AddObjectRef(m, "PickleError", st->PickleError) < 0) { return NULL; - Py_INCREF(st->PicklingError); - if (PyModule_AddObject(m, "PicklingError", st->PicklingError) < 0) + } + if (PyModule_AddObjectRef(m, "PicklingError", st->PicklingError) < 0) { return NULL; - Py_INCREF(st->UnpicklingError); - if (PyModule_AddObject(m, "UnpicklingError", st->UnpicklingError) < 0) + } + if (PyModule_AddObjectRef(m, "UnpicklingError", st->UnpicklingError) < 0) { return NULL; - + } if (_Pickle_InitState(st) < 0) return NULL;