Changeset: ed8864a8a204 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ed8864a8a204 Modified Files: gdk/gdk_firstn.c gdk/gdk_group.c gdk/gdk_logger.c gdk/gdk_posix.c gdk/gdk_project.c gdk/gdk_system.h gdk/gdk_value.c Branch: Jun2016 Log Message:
Additional defense lines for failing malloc in GDK diffs (151 lines): diff --git a/gdk/gdk_firstn.c b/gdk/gdk_firstn.c --- a/gdk/gdk_firstn.c +++ b/gdk/gdk_firstn.c @@ -663,6 +663,8 @@ BATfirstn_grouped(BAT **topn, BAT **gids * can use the base type */ tpe = ATOMbasetype(tpe); /* takes care of wrd and oid */ groups = GDKmalloc(sizeof(*groups) * n); + if( groups == NULL) + return GDK_FAIL; oldcand = cand; if (asc) { switch (tpe) { @@ -971,6 +973,8 @@ BATfirstn_grouped_with_groups(BAT **topn * can use the base type */ tpe = ATOMbasetype(tpe); /* takes care of wrd and oid */ groups = GDKmalloc(sizeof(*groups) * n); + if( groups == NULL) + return GDK_FAIL; gv = (const oid *) Tloc(g, BUNfirst(g)); oldcand = cand; if (asc) { diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c --- a/gdk/gdk_group.c +++ b/gdk/gdk_group.c @@ -718,6 +718,9 @@ BATgroup_internal(BAT **groups, BAT **ex unsigned char *restrict bgrps = GDKmalloc(256); const unsigned char *restrict w = (const unsigned char *) Tloc(b, BUNfirst(b)); unsigned char v; + + if( bgrps == NULL) + goto error; memset(bgrps, 0xFF, 256); if (histo) memset(cnts, 0, maxgrps * sizeof(wrd)); @@ -744,6 +747,9 @@ BATgroup_internal(BAT **groups, BAT **ex unsigned short *restrict sgrps = GDKmalloc(65536 * sizeof(short)); const unsigned short *restrict w = (const unsigned short *) Tloc(b, BUNfirst(b)); unsigned short v; + + if( sgrps == NULL) + goto error; memset(sgrps, 0xFF, 65536 * sizeof(short)); if (histo) memset(cnts, 0, maxgrps * sizeof(wrd)); diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -1227,6 +1227,9 @@ bm_subcommit(logger *lg, BAT *list_bid, BATiter iter = (list_nme)?bat_iterator(list_nme):bat_iterator(list_bid); gdk_return res; + if( n == NULL) + return GDK_FAIL; + n[i++] = 0; /* n[0] is not used */ BATloop(list_bid, p, q) { bat col = *(log_bid *) Tloc(list_bid, p); diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c --- a/gdk/gdk_posix.c +++ b/gdk/gdk_posix.c @@ -582,6 +582,12 @@ MT_mremap(const char *path, int mode, vo if (fd >= 0) close(fd); p = malloc(strlen(path) + 5); + if ( p == NULL){ + GDKsyserror("MT_mremap: malloc() failed\n"); + fprintf(stderr, "= %s:%d: MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): fd < 0\n", __FILE__, __LINE__, path, PTRFMTCAST old_address, old_size, *new_size); + return NULL; + } + strcat(strcpy(p, path), ".tmp"); fd = open(p, O_RDWR | O_CREAT, MONETDB_MODE); @@ -1048,6 +1054,8 @@ reduce_dir_name(const char *src, char *d if (len >= cap) buf = malloc(len + 1); + if( buf == NULL) + return NULL; while (--len > 0 && src[len - 1] != ':' && src[len] == DIR_SEP) ; for (buf[++len] = 0; len > 0; buf[len] = src[len]) diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c --- a/gdk/gdk_project.c +++ b/gdk/gdk_project.c @@ -447,6 +447,8 @@ BATprojectchain(BAT **bats) for (n = 0; bats[n]; n++) ; ba = GDKmalloc(sizeof(*ba) * n); + if( ba == NULL) + return NULL; b = *bats++; cnt = BATcount(b); /* this will be the size of the output */ hseq = b->hseqbase; /* this will be the seqbase of the output */ diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h --- a/gdk/gdk_system.h +++ b/gdk/gdk_system.h @@ -228,17 +228,19 @@ gdk_export ATOMIC_TYPE volatile GDKlocks MT_Lock * volatile _p; \ /* save a copy for statistical purposes */ \ _p = GDKmalloc(sizeof(MT_Lock)); \ - memcpy(_p, l, sizeof(MT_Lock)); \ - while (ATOMIC_TAS(GDKlocklistlock, dummy) != 0) \ - ; \ - _p->next = GDKlocklist; \ - GDKlocklist = _p; \ - for (_p = GDKlocklist; _p; _p = _p->next) \ - if (_p->next == (l)) { \ - _p->next = (l)->next; \ - break; \ - } \ - ATOMIC_CLEAR(GDKlocklistlock, dummy); \ + if( _p) { \ + memcpy(_p, l, sizeof(MT_Lock)); \ + while (ATOMIC_TAS(GDKlocklistlock, dummy) != 0) \ + ; \ + _p->next = GDKlocklist; \ + GDKlocklist = _p; \ + for (_p = GDKlocklist; _p; _p = _p->next) \ + if (_p->next == (l)) { \ + _p->next = (l)->next; \ + break; \ + } \ + ATOMIC_CLEAR(GDKlocklistlock, dummy); \ + }\ } \ } while (0) diff --git a/gdk/gdk_value.c b/gdk/gdk_value.c --- a/gdk/gdk_value.c +++ b/gdk/gdk_value.c @@ -157,7 +157,8 @@ VALcopy(ValPtr d, const ValRecord *s) d->vtype = s->vtype; d->len = ATOMlen(d->vtype, p); d->val.pval = GDKmalloc(d->len); - memcpy(d->val.pval, p, d->len); + if( d->val.pval) + memcpy(d->val.pval, p, d->len); } return d; } @@ -182,7 +183,8 @@ VALinit(ValPtr d, int tpe, const void *s d->vtype = tpe; d->len = ATOMlen(tpe, s); d->val.pval = GDKmalloc(d->len); - memcpy(d->val.pval, s, d->len); + if( d->val.pval) + memcpy(d->val.pval, s, d->len); } return d; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list