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