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