]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40645: Fix ref leaks in _hashopenssl (GH-26079)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 12 May 2021 18:45:06 +0000 (11:45 -0700)
committerGitHub <noreply@github.com>
Wed, 12 May 2021 18:45:06 +0000 (11:45 -0700)
(cherry picked from commit 504ffdae4e0cb7775f3e584c3b1d20c262fdfd7e)

Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@innova.no>
Modules/_hashopenssl.c

index b2c67759e95ea30804f58b634a563b46987735b6..e4a28853775672f8b1da0f1c182b7177ce5af6bb 100644 (file)
@@ -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;