From: Thomas Heller Date: Wed, 6 Feb 2008 20:29:17 +0000 (+0000) Subject: Fixed refcounts and error handling. X-Git-Tag: v2.6a1~255 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=55b8c3e26fe608a1caf65cb35e41cdcbd8353426;p=python Fixed refcounts and error handling. Should not be merged to py3k branch. --- 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