diff options
author | Marco Paolini <mpaolini@users.noreply.github.com> | 2019-11-15 08:42:51 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2019-11-15 08:42:51 (GMT) |
commit | b44ffc8b409fd539c5fb2b79385498e9fe168880 (patch) | |
tree | 72a72f44424e9701e17251e7c1bb3171db9ef91f | |
parent | 57d3ab85a4a4cf740b538ca3450849986f85df87 (diff) | |
download | cpython-b44ffc8b409fd539c5fb2b79385498e9fe168880.zip cpython-b44ffc8b409fd539c5fb2b79385498e9fe168880.tar.gz cpython-b44ffc8b409fd539c5fb2b79385498e9fe168880.tar.bz2 |
bpo-38677: Fix arraymodule error handling in module initialization. (GH-17039)
-rw-r--r-- | Modules/arraymodule.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 5ba2618..1ceba9e 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -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; } |