summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2007-05-03 12:05:20 (GMT)
committerThomas Heller <theller@ctypes.org>2007-05-03 12:05:20 (GMT)
commit9b73d0aed5e398b83669b4ab5c6f806369d37688 (patch)
tree9aa4f1fcace476a09bbdb9ca5933b165afd19de9 /Modules
parent8baeb11041386590b111c604956658e4957ec20e (diff)
downloadcpython-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.c23
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);