ctypes: fix CThunkObject_new()

* Initialize restype and flags fields to fix a crash when Python runs on a
  read-only file system
* Use Py_ssize_t type rather than int for the "i" iterator variable
* Reorder assignements to be able to more easily check if all fields are
  initialized

Issue #11048. Initial patch written by Marcin Bachry.
This commit is contained in:
Victor Stinner 2016-07-27 16:58:47 +02:00
parent 25539b089f
commit e33797b686
1 changed files with 4 additions and 2 deletions

View File

@ -305,7 +305,7 @@ static void closure_fcn(ffi_cif *cif,
static CThunkObject* CThunkObject_new(Py_ssize_t nArgs) static CThunkObject* CThunkObject_new(Py_ssize_t nArgs)
{ {
CThunkObject *p; CThunkObject *p;
int i; Py_ssize_t i;
p = PyObject_GC_NewVar(CThunkObject, &PyCThunk_Type, nArgs); p = PyObject_GC_NewVar(CThunkObject, &PyCThunk_Type, nArgs);
if (p == NULL) { if (p == NULL) {
@ -313,11 +313,13 @@ static CThunkObject* CThunkObject_new(Py_ssize_t nArgs)
return NULL; return NULL;
} }
p->pcl_exec = NULL;
p->pcl_write = NULL; p->pcl_write = NULL;
p->pcl_exec = NULL;
memset(&p->cif, 0, sizeof(p->cif)); memset(&p->cif, 0, sizeof(p->cif));
p->flags = 0;
p->converters = NULL; p->converters = NULL;
p->callable = NULL; p->callable = NULL;
p->restype = NULL;
p->setfunc = NULL; p->setfunc = NULL;
p->ffi_restype = NULL; p->ffi_restype = NULL;