diff options
author | Thomas Heller <theller@ctypes.org> | 2008-01-11 19:48:46 +0000 |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2008-01-11 19:48:46 +0000 |
commit | b9c741c43cdd08a18120f23cfca81afeaead9820 (patch) | |
tree | b533ae8c7725497266e60b5ad6fba4878c03454e | |
parent | c5bb8684145e80a2410bd1956b068706db61c794 (diff) | |
download | cpython-git-b9c741c43cdd08a18120f23cfca81afeaead9820.tar.gz |
Added NEWS entry, plus:
Merged revisions 59925 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk/Modules/_ctypes
........
r59925 | thomas.heller | 2008-01-11 20:34:06 +0100 (Fr, 11 Jan 2008) | 5 lines
Raise an error instead of crashing with a segfault when a NULL
function pointer is called.
Will backport to release25-maint.
........
-rw-r--r-- | Lib/ctypes/test/test_funcptr.py | 6 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/_ctypes/_ctypes.c | 5 |
3 files changed, 13 insertions, 0 deletions
diff --git a/Lib/ctypes/test/test_funcptr.py b/Lib/ctypes/test/test_funcptr.py index 7ea873f0a4..92bf89bb60 100644 --- a/Lib/ctypes/test/test_funcptr.py +++ b/Lib/ctypes/test/test_funcptr.py @@ -123,5 +123,11 @@ class CFuncPtrTestCase(unittest.TestCase): self.failUnlessEqual(strtok(None, "\n"), "c") self.failUnlessEqual(strtok(None, "\n"), None) + def test_NULL_funcptr(self): + tp = CFUNCTYPE(c_int) + func = tp() # NULL function pointer + # raise a ValueError when we try to call it + self.assertRaises(ValueError, func) + if __name__ == '__main__': unittest.main() @@ -12,6 +12,8 @@ What's New in Python 2.5.2c1? Core and builtins ----------------- +- Prevent a segfault when a ctypes NULL function pointer is called. + - Bug #1517: Possible segfault in lookup(). - Issue #1638: %zd configure test fails on Linux. diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 73b5cbdc2e..47fab8a00a 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3305,6 +3305,11 @@ CFuncPtr_call(CFuncPtrObject *self, PyObject *inargs, PyObject *kwds) pProc = *(void **)self->b_ptr; + if (pProc == NULL) { + PyErr_SetString(PyExc_ValueError, + "attempt to call NULL function pointer"); + return NULL; + } #ifdef MS_WIN32 if (self->index) { /* It's a COM method */ |