Changeset: abf8423b97ec for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=abf8423b97ec
Modified Files:
        monetdb5/modules/mal/mal_io.c
        monetdb5/optimizer/opt_mergetable.c
Branch: linear-hashing
Log Message:

Fix resource leak detected by Coverity
and defensive code


diffs (63 lines):

diff --git a/monetdb5/modules/mal/mal_io.c b/monetdb5/modules/mal/mal_io.c
--- a/monetdb5/modules/mal/mal_io.c
+++ b/monetdb5/modules/mal/mal_io.c
@@ -48,6 +48,8 @@ io_stdin(Client cntxt, MalBlkPtr mb, Mal
 {
        bstream **ret= (bstream**) getArgReference(stk,pci,0);
        (void) mb;
+       if( cntxt->fdin == NULL)
+               throw(MAL, "io.print", SQLSTATE(HY002) "Input channel missing");
        *ret = cntxt->fdin;
        return MAL_SUCCEED;
 }
@@ -57,6 +59,8 @@ io_stdout(Client cntxt, MalBlkPtr mb, Ma
 {
        stream **ret= (stream**) getArgReference(stk,pci,0);
        (void) mb;
+       if( cntxt->fdout == NULL)
+               throw(MAL, "io.print", SQLSTATE(HY002) "Output channel 
missing");
        *ret = cntxt->fdout;
        return MAL_SUCCEED;
 }
@@ -69,6 +73,8 @@ IOprintBoth(Client cntxt, MalBlkPtr mb, 
        stream *fp = cntxt->fdout;
 
        (void) mb;
+       if( cntxt->fdout == NULL)
+               throw(MAL, "io.print", SQLSTATE(HY002) "Output channel 
missing");
 
        if (tpe == TYPE_any)
                tpe = stk->stk[pci->argv[indx]].vtype;
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
@@ -1417,8 +1417,13 @@ mat_group_new(MalBlkPtr mb, InstrPtr p, 
                pushInstruction(mb, q);
                if(setPartnr(ml, getArg(ml->v[b].mi,i), getArg(q,0), i) ||
                   setPartnr(ml, getArg(ml->v[b].mi,i), getArg(q,1), i) ||
-                  setPartnr(ml, getArg(ml->v[b].mi,i), getArg(q,2), i))
+                  setPartnr(ml, getArg(ml->v[b].mi,i), getArg(q,2), i)){
+                       freeInstruction(r0);
+                       freeInstruction(r1);
+                       freeInstruction(r2);
+                       freeInstruction(attr);
                        return -1;
+               }
 
                /* add result to mats */
                r0 = addArgument(mb,r0,getArg(q,0));
@@ -1429,8 +1434,13 @@ mat_group_new(MalBlkPtr mb, InstrPtr p, 
                getArg(r, 0) = newTmpVariable(mb, atp);
                r = addArgument(mb, r, getArg(q,1));
                r = addArgument(mb, r, getArg(ml->v[b].mi,i));
-               if(setPartnr(ml, getArg(ml->v[b].mi,i), getArg(r,0), i))
+               if(setPartnr(ml, getArg(ml->v[b].mi,i), getArg(r,0), i)){
+                       freeInstruction(r0);
+                       freeInstruction(r1);
+                       freeInstruction(r2);
+                       freeInstruction(attr);
                        return -1;
+               }
                pushInstruction(mb,r);
 
                attr = addArgument(mb, attr, getArg(r, 0)); 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to