Changeset: e18c02b1ad0e for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e18c02b1ad0e Modified Files: monetdb5/optimizer/opt_dataflow.c monetdb5/optimizer/opt_support.c monetdb5/optimizer/opt_wrapper.c sql/backends/monet5/sql_execute.c Branch: default Log Message:
more unchecked malloc, this time in optimizers. Changed contract for optimizer function return code, values < 0 signal error and abort query. diffs (86 lines): diff --git a/monetdb5/optimizer/opt_dataflow.c b/monetdb5/optimizer/opt_dataflow.c --- a/monetdb5/optimizer/opt_dataflow.c +++ b/monetdb5/optimizer/opt_dataflow.c @@ -201,9 +201,10 @@ OPTdataflowImplementation(Client cntxt, limit= mb->stop; slimit= mb->ssize; old = mb->stmt; - if ( newMalBlkStmt(mb, mb->ssize) <0 ) + if (newMalBlkStmt(mb, mb->ssize) < 0) { + actions = -1; goto wrapup; - + } pushInstruction(mb,old[0]); /* inject new dataflow barriers using a single pass through the program */ @@ -320,9 +321,9 @@ OPTdataflowImplementation(Client cntxt, newComment(mb,buf); wrapup: - if( states) GDKfree(states); - if( sink) GDKfree(sink); - if( old) GDKfree(old); + if(states) GDKfree(states); + if(sink) GDKfree(sink); + if(old) GDKfree(old); return actions; } diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c --- a/monetdb5/optimizer/opt_support.c +++ b/monetdb5/optimizer/opt_support.c @@ -125,7 +125,7 @@ optimizeMALBlock(Client cntxt, MalBlkPtr /* force at least once a complete type check by resetting the type check flag */ resetMalBlk(mb, mb->stop); - chkProgram(cntxt->fdout, cntxt->nspace,mb); + chkProgram(cntxt->fdout, cntxt->nspace, mb); if (mb->errors) throw(MAL, "optimizer.MALoptimizer", "Start with inconsistent MAL plan"); diff --git a/monetdb5/optimizer/opt_wrapper.c b/monetdb5/optimizer/opt_wrapper.c --- a/monetdb5/optimizer/opt_wrapper.c +++ b/monetdb5/optimizer/opt_wrapper.c @@ -143,12 +143,15 @@ str OPTwrapper (Client cntxt, MalBlkPtr } else if( p ) removeInstruction(mb, p); - for ( i=0; codes[i].nme; i++) - if ( strcmp(codes[i].nme, optimizer)== 0 ){ - actions = (int)(*(codes[i].fcn))(cntxt, mb, stk,0); + for (i=0; codes[i].nme; i++) + if (strcmp(codes[i].nme, optimizer) == 0){ + actions = (int)(*(codes[i].fcn))(cntxt, mb, stk, 0); + if (actions < 1) { + throw(MAL, optimizer, "Error in optimizer %s", optimizer); + } break; } - if ( codes[i].nme == 0) + if (codes[i].nme == 0) throw(MAL, optimizer, "Optimizer implementation '%s' missing", fcnnme); OPTIMIZERDEBUG { diff --git a/sql/backends/monet5/sql_execute.c b/sql/backends/monet5/sql_execute.c --- a/sql/backends/monet5/sql_execute.c +++ b/sql/backends/monet5/sql_execute.c @@ -276,7 +276,7 @@ SQLrun(Client c, backend *be, mvc *m){ /* only consider a re-optimization when we are dealing with query templates */ for ( i= 1; i < mb->stop;i++){ - p=getInstrPtr(mb,i); + p = getInstrPtr(mb,i); if( getFunctionId(p) && qc_isapreparedquerytemplate(getFunctionId(p) ) ){ msg = SQLexecutePrepared(c, be, p->blk); freeMalBlk(mb); @@ -284,6 +284,9 @@ SQLrun(Client c, backend *be, mvc *m){ } if( getFunctionId(p) && p->blk && qc_isaquerytemplate(getFunctionId(p)) ) { mc = copyMalBlk(p->blk); + if (!mc) { + throw(SQL, "sql.prepare", "Out of memory"); + } retc = p->retc; freeMalBlk(mb); mb = mc; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list