From 55b8c3e26fe608a1caf65cb35e41cdcbd8353426 Mon Sep 17 00:00:00 2001 From: Thomas Heller Date: Wed, 6 Feb 2008 20:29:17 +0000 Subject: [PATCH] Fixed refcounts and error handling. Should not be merged to py3k branch. --- Modules/_ctypes/_ctypes.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 5d3cba5fcb..52959e44b1 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -4956,16 +4956,19 @@ create_comerror(void) PyObject *s; int status; + if (dict == NULL) + return -1; + while (methods->ml_name) { /* get a wrapper for the built-in function */ PyObject *func = PyCFunction_New(methods, NULL); PyObject *meth; if (func == NULL) - return -1; + goto error; meth = PyMethod_New(func, NULL, ComError); Py_DECREF(func); if (meth == NULL) - return -1; + goto error; PyDict_SetItemString(dict, methods->ml_name, meth); Py_DECREF(meth); ++methods; @@ -4973,21 +4976,22 @@ create_comerror(void) s = PyString_FromString(comerror_doc); if (s == NULL) - return -1; + goto error; status = PyDict_SetItemString(dict, "__doc__", s); Py_DECREF(s); - if (status == -1) { - Py_DECREF(dict); - return -1; - } + if (status == -1) + goto error; ComError = PyErr_NewException("_ctypes.COMError", NULL, dict); if (ComError == NULL) - return -1; + goto error; return 0; + error: + Py_DECREF(dict); + return -1; } #endif -- 2.40.0