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

Reply via email to