From: Thomas Heller <theller@ctypes.org>
Date: Thu, 3 May 2007 12:05:20 +0000 (+0000)
Subject: Don't truncate pointers to integers (on win64 platform).
X-Git-Tag: v2.6a1~1780
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9b73d0aed5e398b83669b4ab5c6f806369d37688;p=python

Don't truncate pointers to integers (on win64 platform).
---

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);