[Python-checkins] r52365 - in python/trunk: Lib/ctypes/test/test_callbacks.py Misc/NEWS Modules/_ctypes/callbacks.c
thomas.heller
python-checkins at python.org
Tue Oct 17 21:30:49 CEST 2006
Author: thomas.heller
Date: Tue Oct 17 21:30:48 2006
New Revision: 52365
Modified:
python/trunk/Lib/ctypes/test/test_callbacks.py
python/trunk/Misc/NEWS
python/trunk/Modules/_ctypes/callbacks.c
Log:
ctypes callback functions only support 'fundamental' result types.
Check this and raise an error when something else is used - before
this change ctypes would hang or crash when such a callback was
called. This is a partial fix for #1574584.
Will backport to release25-maint.
Modified: python/trunk/Lib/ctypes/test/test_callbacks.py
==============================================================================
--- python/trunk/Lib/ctypes/test/test_callbacks.py (original)
+++ python/trunk/Lib/ctypes/test/test_callbacks.py Tue Oct 17 21:30:48 2006
@@ -101,6 +101,19 @@
after = grc(o)
self.failUnlessEqual((after, o), (before, o))
+ def test_unsupported_restype_1(self):
+ # Only "fundamental" result types are supported for callback
+ # functions, the type must have a non-NULL stgdict->setfunc.
+ # POINTER(c_double), for example, is not supported.
+
+ prototype = self.functype.im_func(POINTER(c_double))
+ # The type is checked when the prototype is called
+ self.assertRaises(TypeError, prototype, lambda: None)
+
+ def test_unsupported_restype_2(self):
+ prototype = self.functype.im_func(object)
+ self.assertRaises(TypeError, prototype, lambda: None)
+
try:
WINFUNCTYPE
except NameError:
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS (original)
+++ python/trunk/Misc/NEWS Tue Oct 17 21:30:48 2006
@@ -81,6 +81,10 @@
Library
-------
+- ctypes callback functions only support 'fundamental' data types as
+ result type. Raise an error when something else is used. This is a
+ partial fix for Bug #1574584.
+
- Fix turtle so that time.sleep is imported for the entire library. Allows
the demo2 function to be executed on its own instead of only when the
module is run as a script.
Modified: python/trunk/Modules/_ctypes/callbacks.c
==============================================================================
--- python/trunk/Modules/_ctypes/callbacks.c (original)
+++ python/trunk/Modules/_ctypes/callbacks.c Tue Oct 17 21:30:48 2006
@@ -293,8 +293,11 @@
p->restype = &ffi_type_void;
} else {
StgDictObject *dict = PyType_stgdict(restype);
- if (dict == NULL)
- goto error;
+ if (dict == NULL || dict->setfunc == NULL) {
+ PyErr_SetString(PyExc_TypeError,
+ "invalid result type for callback function");
+ goto error;
+ }
p->setfunc = dict->setfunc;
p->restype = &dict->ffi_type_pointer;
}
More information about the Python-checkins
mailing list