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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list