Skip to content

Commit 820c5d8

Browse files
committed
+ handle memory errors
1 parent 1e45180 commit 820c5d8

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

Modules/_ctypes/_ctypes.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2271,12 +2271,17 @@ static PyObject *CreateSwappedType(ctypes_state *st, PyTypeObject *type,
22712271
stginfo->ffi_type_pointer = *fmt->pffi_type;
22722272
}
22732273
else {
2274+
const size_t els_size = sizeof(fmt->pffi_type->elements);
22742275
stginfo->ffi_type_pointer.size = fmt->pffi_type->size;
22752276
stginfo->ffi_type_pointer.alignment = fmt->pffi_type->alignment;
22762277
stginfo->ffi_type_pointer.type = fmt->pffi_type->type;
2277-
stginfo->ffi_type_pointer.elements = PyMem_Malloc(2 * sizeof(ffi_type));
2278+
stginfo->ffi_type_pointer.elements = PyMem_Malloc(els_size);
2279+
if (!stginfo->ffi_type_pointer.elements) {
2280+
Py_DECREF(result);
2281+
return PyErr_NoMemory();
2282+
}
22782283
memcpy(stginfo->ffi_type_pointer.elements,
2279-
fmt->pffi_type->elements, 2 * sizeof(ffi_type));
2284+
fmt->pffi_type->elements, els_size);
22802285
}
22812286
stginfo->align = fmt->pffi_type->alignment;
22822287
stginfo->length = 0;
@@ -2382,6 +2387,10 @@ PyCSimpleType_init(PyObject *self, PyObject *args, PyObject *kwds)
23822387
stginfo->ffi_type_pointer.alignment = fmt->pffi_type->alignment;
23832388
stginfo->ffi_type_pointer.type = fmt->pffi_type->type;
23842389
stginfo->ffi_type_pointer.elements = PyMem_Malloc(els_size);
2390+
if (!stginfo->ffi_type_pointer.elements) {
2391+
PyErr_NoMemory();
2392+
goto error;
2393+
}
23852394
memcpy(stginfo->ffi_type_pointer.elements,
23862395
fmt->pffi_type->elements, els_size);
23872396
}

0 commit comments

Comments
 (0)