]> granicus.if.org Git - python/commitdiff
Don't truncate pointers to integers (on win64 platform).
authorThomas Heller <theller@ctypes.org>
Thu, 3 May 2007 12:05:20 +0000 (12:05 +0000)
committerThomas Heller <theller@ctypes.org>
Thu, 3 May 2007 12:05:20 +0000 (12:05 +0000)
Modules/_ctypes/callbacks.c

index 0e5d6c0456f5b5c8ef9d312704482ff92427cc9a..657a207f53a1f4e2200a5fc3ebbf62e300d1919f 100644 (file)
@@ -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);