Handle alloca failures.

Klocwork 225-228
This commit is contained in:
Neal Norwitz 2006-08-13 18:40:39 +00:00
parent 9ac8953568
commit 93bf902242
2 changed files with 15 additions and 0 deletions

View File

@ -2475,6 +2475,8 @@ static PPROC FindAddress(void *handle, char *name, PyObject *type)
where n is 0, 4, 8, 12, ..., 128 where n is 0, 4, 8, 12, ..., 128
*/ */
mangled_name = alloca(strlen(name) + 1 + 1 + 1 + 3); /* \0 _ @ %d */ mangled_name = alloca(strlen(name) + 1 + 1 + 1 + 3); /* \0 _ @ %d */
if (!mangled_name)
return NULL;
for (i = 0; i < 32; ++i) { for (i = 0; i < 32; ++i) {
sprintf(mangled_name, "_%s@%d", name, i*4); sprintf(mangled_name, "_%s@%d", name, i*4);
address = (PPROC)GetProcAddress(handle, mangled_name); address = (PPROC)GetProcAddress(handle, mangled_name);

View File

@ -915,6 +915,10 @@ PyObject *_CallProc(PPROC pProc,
#endif #endif
args = (struct argument *)alloca(sizeof(struct argument) * argcount); args = (struct argument *)alloca(sizeof(struct argument) * argcount);
if (!args) {
PyErr_NoMemory();
return NULL;
}
memset(args, 0, sizeof(struct argument) * argcount); memset(args, 0, sizeof(struct argument) * argcount);
argtype_count = argtypes ? PyTuple_GET_SIZE(argtypes) : 0; argtype_count = argtypes ? PyTuple_GET_SIZE(argtypes) : 0;
#ifdef MS_WIN32 #ifdef MS_WIN32
@ -968,6 +972,10 @@ PyObject *_CallProc(PPROC pProc,
avalues = (void **)alloca(sizeof(void *) * argcount); avalues = (void **)alloca(sizeof(void *) * argcount);
atypes = (ffi_type **)alloca(sizeof(ffi_type *) * argcount); atypes = (ffi_type **)alloca(sizeof(ffi_type *) * argcount);
if (!resbuf || !avalues || !atypes) {
PyErr_NoMemory();
goto cleanup;
}
for (i = 0; i < argcount; ++i) { for (i = 0; i < argcount; ++i) {
atypes[i] = args[i].ffi_type; atypes[i] = args[i].ffi_type;
if (atypes[i]->type == FFI_TYPE_STRUCT) if (atypes[i]->type == FFI_TYPE_STRUCT)
@ -1068,6 +1076,11 @@ static PyObject *load_library(PyObject *self, PyObject *args)
return NULL; return NULL;
#ifdef _UNICODE #ifdef _UNICODE
name = alloca((PyString_Size(nameobj) + 1) * sizeof(WCHAR)); name = alloca((PyString_Size(nameobj) + 1) * sizeof(WCHAR));
if (!name) {
PyErr_NoMemory();
return NULL;
}
{ {
int r; int r;
char *aname = PyString_AsString(nameobj); char *aname = PyString_AsString(nameobj);