From 983aa4c688843ad347e78bbca892c797c4e4bcd3 Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Wed, 12 May 2021 20:20:41 +0200 Subject: [PATCH] bpo-40645: Fix ref leaks in _hashopenssl (GH-26079) (cherry picked from commit 504ffdae4e0cb7775f3e584c3b1d20c262fdfd7e) Co-authored-by: Erlend Egeberg Aasland --- Modules/_hashopenssl.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index b2c67759e95ea3..e4a28853775672 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -2093,20 +2093,25 @@ hashlib_init_constructors(PyObject *module) } func = PyObject_GetAttrString(module, fdef->ml_name); if (func == NULL) { + Py_DECREF(name_obj); return -1; } - if (PyDict_SetItem(state->constructs, func, name_obj) < 0) { - return -1; - } + int rc = PyDict_SetItem(state->constructs, func, name_obj); Py_DECREF(func); Py_DECREF(name_obj); + if (rc < 0) { + return -1; + } } proxy = PyDictProxy_New(state->constructs); if (proxy == NULL) { return -1; } - if (PyModule_AddObjectRef(module, "_constructors", proxy) < 0) { + + int rc = PyModule_AddObjectRef(module, "_constructors", proxy); + Py_DECREF(proxy); + if (rc < 0) { return -1; } return 0;