]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-38677: Fix arraymodule error handling in module initialization. (GH-17039)
authorMarco Paolini <mpaolini@users.noreply.github.com>
Fri, 15 Nov 2019 08:42:51 +0000 (08:42 +0000)
committerSerhiy Storchaka <storchaka@gmail.com>
Fri, 15 Nov 2019 08:42:51 +0000 (10:42 +0200)
Modules/arraymodule.c

index 5ba261819db2cef374c92db5d5208c8d25cabba7..1ceba9e63cbdf434d99a619765de300e4d262d6e 100644 (file)
@@ -3040,9 +3040,15 @@ array_modexec(PyObject *m)
     Py_TYPE(&PyArrayIter_Type) = &PyType_Type;
 
     Py_INCREF((PyObject *)&Arraytype);
-    PyModule_AddObject(m, "ArrayType", (PyObject *)&Arraytype);
+    if (PyModule_AddObject(m, "ArrayType", (PyObject *)&Arraytype) < 0) {
+        Py_DECREF((PyObject *)&Arraytype);
+        return -1;
+    }
     Py_INCREF((PyObject *)&Arraytype);
-    PyModule_AddObject(m, "array", (PyObject *)&Arraytype);
+    if (PyModule_AddObject(m, "array", (PyObject *)&Arraytype) < 0) {
+        Py_DECREF((PyObject *)&Arraytype);
+        return -1;
+    }
 
     for (descr=descriptors; descr->typecode != '\0'; descr++) {
         size++;
@@ -3053,13 +3059,11 @@ array_modexec(PyObject *m)
         *p++ = (char)descr->typecode;
     }
     typecodes = PyUnicode_DecodeASCII(buffer, p - buffer, NULL);
-
-    PyModule_AddObject(m, "typecodes", typecodes);
-
-    if (PyErr_Occurred()) {
-        Py_DECREF(m);
-        m = NULL;
+    if (PyModule_AddObject(m, "typecodes", typecodes) < 0) {
+        Py_XDECREF(typecodes);
+        return -1;
     }
+
     return 0;
 }