Changeset: 039e1a5a4266 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=039e1a5a4266
Modified Files:
        monetdb5/mal/mal_builder.c
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_stack.c
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_reorder.c
        sql/backends/monet5/sql_optimizer.c
Branch: Dec2016
Log Message:

Check for malloc failures in several places


diffs (141 lines):

diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -108,6 +108,10 @@ newComment(MalBlkPtr mb, const char *val
        }
        cst.len= (int) strlen(cst.val.sval);
        getArg(q,0) = defConstant(mb,TYPE_str,&cst);
+       if (getArg(q,0) < 0) {
+               freeInstruction(q);
+               return NULL;
+       }
        clrVarConstant(mb,getArg(q,0));
        setVarDisabled(mb,getArg(q,0));
        if (mb->errors) {
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -730,7 +730,6 @@ makeVarSpace(MalBlkPtr mb)
                if (new == NULL) {
                        mb->errors++;
                        showScriptException(GDKout, mb, 0, MAL, "newMalBlk:no 
storage left\n");
-                       assert(0);
                        return -1;
                }
                memset(new + mb->vsize, 0, (s - mb->vsize) * sizeof(VarPtr));
@@ -1258,6 +1257,9 @@ defConstant(MalBlkPtr mb, int type, ValP
                return k;
        }
        k = newTmpVariable(mb, type);
+       if (k == -1) {
+               return k;
+       }
        setVarConstant(mb, k);
        setVarFixed(mb, k);
        if (type >= 0 && type < GDKatomcnt && ATOMextern(type))
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -285,6 +285,9 @@ prepareMALstack(MalBlkPtr mb, int size)
 
        assert(size >= mb->vsize);
        stk = newGlobalStack(size);
+       if (!stk) {
+               return NULL;
+       }
        //memset((char *)stk, 0, stackSize(size)); already set
        //stk->stksize = size;
        stk->stktop = mb->vtop;
diff --git a/monetdb5/mal/mal_stack.c b/monetdb5/mal/mal_stack.c
--- a/monetdb5/mal/mal_stack.c
+++ b/monetdb5/mal/mal_stack.c
@@ -59,8 +59,9 @@ newGlobalStack(int size)
        MalStkPtr s;
 
        s = (MalStkPtr) GDKzalloc(stackSize(size) + offsetof(MalStack, stk));
-       if (s == NULL)
-               GDKfatal("newGlobalStack:can not obtain memory\n");
+       if (!s) {
+               return NULL;
+       }
        s->stksize = size;
        return s;
 }
@@ -75,6 +76,9 @@ reallocGlobalStack(MalStkPtr old, int cn
                return old;
        k = ((cnt / STACKINCR) + 1) * STACKINCR;
        s = newGlobalStack(k);
+       if (!s) {
+               return NULL;
+       }
        memcpy(s, old, stackSize(old->stksize));
        s->stksize = k;
        GDKfree(old);
diff --git a/monetdb5/optimizer/opt_mergetable.c 
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -1647,8 +1647,9 @@ OPTmergetableImplementation(Client cntxt
        ml.vsize = mb->vsize;
        ml.horigin = (int*) GDKmalloc(sizeof(int)* ml.vsize);
        ml.torigin = (int*) GDKmalloc(sizeof(int)* ml.vsize);
-       if ( ml.v == NULL || ml.horigin == NULL || ml.torigin == NULL) 
+       if ( ml.v == NULL || ml.horigin == NULL || ml.torigin == NULL) {
                goto cleanup;
+       }
        for (i=0; i<ml.vsize; i++) 
                ml.horigin[i] = ml.torigin[i] = -1;
 
@@ -1961,9 +1962,9 @@ OPTmergetableImplementation(Client cntxt
                        freeInstruction(ml.v[i].mi);
        }
 cleanup:
-       GDKfree(ml.v);
-       GDKfree(ml.horigin);
-       GDKfree(ml.torigin);
+       if (ml.v) GDKfree(ml.v);
+       if (ml.horigin) GDKfree(ml.horigin);
+       if (ml.torigin) GDKfree(ml.torigin);
     /* Defense line against incorrect plans */
     if( actions > 0){
         chkTypes(cntxt->fdout, cntxt->nspace, mb, FALSE);
diff --git a/monetdb5/optimizer/opt_reorder.c b/monetdb5/optimizer/opt_reorder.c
--- a/monetdb5/optimizer/opt_reorder.c
+++ b/monetdb5/optimizer/opt_reorder.c
@@ -134,6 +134,11 @@ OPTdependencies(Client cntxt, MalBlkPtr 
                sz += list[i]->used;
        }
        uselist = GDKzalloc(sizeof(int)*sz);
+       if (!uselist) {
+               GDKfree(list);
+               GDKfree(var);
+               return NULL;
+       }
 
        for(i=0;i<mb->stop; i++) {
                if (list[i]->cnt) {
diff --git a/sql/backends/monet5/sql_optimizer.c 
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -60,11 +60,11 @@ SQLgetColumnSize(sql_trans *tr, sql_colu
        return size;
 }
 
-static lng 
+static lng
 SQLgetSpace(mvc *m, MalBlkPtr mb, int prepare)
 {
        sql_trans *tr = m->session->tr;
-       lng size,space = 0, i; 
+       lng size,space = 0, i;
 
        for (i = 0; i < mb->stop; i++) {
                InstrPtr p = mb->stmt[i];
@@ -80,7 +80,7 @@ SQLgetSpace(mvc *m, MalBlkPtr mb, int pr
                        sql_table *t = 0;
                        sql_column *c = 0;
 
-                       if (!s || strcmp(s->base.name, dt_schema) == 0) 
+                       if (!s || strcmp(s->base.name, dt_schema) == 0)
                                continue;
                        t = mvc_bind_table(m, s, tname);
                        if (!t)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to