This commit is contained in:
Nadeshiko Manju 2026-02-05 17:04:14 +09:00 committed by GitHub
commit 98536bd3b4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 14 additions and 1 deletions

View file

@ -130,6 +130,14 @@ def c_string(init):
def test_abstract(self):
self.assertRaises(TypeError, _CFuncPtr, 13, "name", 42, "iid")
def test_invalid_argtypes(self):
libc = CDLL(None)
PRINTF_PROTO = CFUNCTYPE(c_int, ctypes.c_char_p)
c_printf = PRINTF_PROTO(("printf", libc), ((1,),))
c_printf.argtypes = (c_char_p, c_int)
with self.assertRaises(TypeError):
c_printf(b"Hello\n")
if __name__ == '__main__':
unittest.main()

View file

@ -0,0 +1 @@
Fix segfaults in _cyptes during _build_callargs.

View file

@ -4373,7 +4373,11 @@ _build_callargs(ctypes_state *st, PyCFuncPtrObject *self, PyObject *argtypes,
callargs = PyTuple_New(len); /* the argument tuple we build */
if (callargs == NULL)
return NULL;
if (!_validate_paramflags(st, Py_TYPE(self), argtypes)) {
PyErr_SetString(PyExc_TypeError,
"the current argument is invalid");
goto error;
}
#ifdef MS_WIN32
/* For a COM method, skip the first arg */
if (self->index) {