summaryrefslogtreecommitdiffstats
path: root/Modules/arraymodule.c
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-11-15 09:37:26 (GMT)
committerGitHub <noreply@github.com>2019-11-15 09:37:26 (GMT)
commit25ce77dd2455abbb6e2c9e055bbc98954642fa7c (patch)
tree52b159da51eca972dbd8fa19d752f713ee483ade /Modules/arraymodule.c
parentdae27cc8e72106c2eceeff9af83d1e58b2bb68d5 (diff)
downloadcpython-25ce77dd2455abbb6e2c9e055bbc98954642fa7c.zip
cpython-25ce77dd2455abbb6e2c9e055bbc98954642fa7c.tar.gz
cpython-25ce77dd2455abbb6e2c9e055bbc98954642fa7c.tar.bz2
bpo-38677: Fix arraymodule error handling in module initialization. (GH-17039)
(cherry picked from commit b44ffc8b409fd539c5fb2b79385498e9fe168880) Co-authored-by: Marco Paolini <mpaolini@users.noreply.github.com>
Diffstat (limited to 'Modules/arraymodule.c')
-rw-r--r--Modules/arraymodule.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 26c90a8..5289ea0 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -3042,9 +3042,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++;
@@ -3055,13 +3061,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;
}