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
|
|
@ -291,10 +291,6 @@ DOH *DohNewFile(DOHString *filename, const char *mode, DOHList *newfiles) {
|
|||
return 0;
|
||||
|
||||
f = (DohFile *) DohMalloc(sizeof(DohFile));
|
||||
if (!f) {
|
||||
fclose(file);
|
||||
return 0;
|
||||
}
|
||||
if (newfiles)
|
||||
Append(newfiles, filename);
|
||||
f->filep = file;
|
||||
|
|
@ -314,8 +310,6 @@ DOH *DohNewFile(DOHString *filename, const char *mode, DOHList *newfiles) {
|
|||
DOH *DohNewFileFromFile(FILE *file) {
|
||||
DohFile *f;
|
||||
f = (DohFile *) DohMalloc(sizeof(DohFile));
|
||||
if (!f)
|
||||
return 0;
|
||||
f->filep = file;
|
||||
f->fd = 0;
|
||||
f->closeondel = 0;
|
||||
|
|
@ -331,8 +325,6 @@ DOH *DohNewFileFromFile(FILE *file) {
|
|||
DOH *DohNewFileFromFd(int fd) {
|
||||
DohFile *f;
|
||||
f = (DohFile *) DohMalloc(sizeof(DohFile));
|
||||
if (!f)
|
||||
return 0;
|
||||
f->filep = 0;
|
||||
f->fd = fd;
|
||||
f->closeondel = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue