diff options
author | Thomas Heller <theller@ctypes.org> | 2007-05-03 12:05:20 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2007-05-03 12:05:20 (GMT) |
commit | 9b73d0aed5e398b83669b4ab5c6f806369d37688 (patch) | |
tree | 9aa4f1fcace476a09bbdb9ca5933b165afd19de9 /Modules | |
parent | 8baeb11041386590b111c604956658e4957ec20e (diff) | |
download | cpython-9b73d0aed5e398b83669b4ab5c6f806369d37688.zip cpython-9b73d0aed5e398b83669b4ab5c6f806369d37688.tar.gz cpython-9b73d0aed5e398b83669b4ab5c6f806369d37688.tar.bz2 |
Don't truncate pointers to integers (on win64 platform).
Diffstat (limited to 'Modules')
-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 0e5d6c0..657a207 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); |