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

Reply via email to