diff options
-rw-r--r-- | Modules/_ctypes/callbacks.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c index 0e5d6c0456..657a207f53 100644 --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -383,8 +383,27 @@ long Call_GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) return E_FAIL; } - result = PyObject_CallFunction(func, - "iii", rclsid, riid, ppv); + { + PyObject *py_rclsid = PyLong_FromVoidPtr(rclsid); + PyObject *py_riid = PyLong_FromVoidPtr(riid); + PyObject *py_ppv = PyLong_FromVoidPtr(ppv); + if (!py_rclsid || !py_riid || !py_ppv) { + Py_XDECREF(py_rclsid); + Py_XDECREF(py_riid); + Py_XDECREF(py_ppv); + Py_DECREF(func); + PyErr_WriteUnraisable(context ? context : Py_None); + return E_FAIL; + } + result = PyObject_CallFunctionObjArgs(func, + py_rclsid, + py_riid, + py_ppv, + NULL); + Py_DECREF(py_rclsid); + Py_DECREF(py_riid); + Py_DECREF(py_ppv); + } Py_DECREF(func); if (!result) { PyErr_WriteUnraisable(context ? context : Py_None); |