Fail cleanly on allocation failures
Previously code in the SWIG tool didn't handle allocation failures well. Most places didn't check for NULL return from malloc()/realloc()/calloc() at all, typically resulting in undefined behaviour, and some places used assert() to check for a NULL return (which is a misuse of assert() and such checks disappear if built with NDEBUG defined leaving us back with undefined behaviour). All C allocations are now done via wrapper functions (Malloc(), Realloc() and Calloc()) which emit and error and exit with non-zero status on failure, so a non-NULL return can be relied upon. Fixes #1901.
This commit is contained in:
parent
9eb75a0c07
commit
e38847f7e1
14 changed files with 83 additions and 65 deletions
|
|
@ -27,7 +27,6 @@ extern DohObjInfo DohListType;
|
|||
static
|
||||
void more(List *l) {
|
||||
l->items = (void **) DohRealloc(l->items, l->maxitems * 2 * sizeof(void *));
|
||||
assert(l->items);
|
||||
l->maxitems *= 2;
|
||||
}
|
||||
|
||||
|
|
@ -346,15 +345,10 @@ DohObjInfo DohListType = {
|
|||
#define MAXLISTITEMS 8
|
||||
|
||||
DOH *DohNewList(void) {
|
||||
List *l;
|
||||
int i;
|
||||
l = (List *) DohMalloc(sizeof(List));
|
||||
List *l = (List *) DohMalloc(sizeof(List));
|
||||
l->nitems = 0;
|
||||
l->maxitems = MAXLISTITEMS;
|
||||
l->items = (void **) DohMalloc(l->maxitems * sizeof(void *));
|
||||
for (i = 0; i < MAXLISTITEMS; i++) {
|
||||
l->items[i] = 0;
|
||||
}
|
||||
l->items = (void **) DohCalloc(l->maxitems, sizeof(void *));
|
||||
l->file = 0;
|
||||
l->line = 0;
|
||||
return DohObjMalloc(&DohListType, l);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue