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