Changeset: e6ae560608a1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e6ae560608a1 Modified Files: sql/backends/monet5/sql_execute.c Branch: default Log Message:
Fix a few memory leaks under error conditions diffs (58 lines): 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 @@ -308,6 +308,7 @@ SQLrun(Client c, backend *be, mvc *m) if( getFunctionId(p) && p->blk && qc_isaquerytemplate(getFunctionId(p)) ) { mc = copyMalBlk(p->blk); if (!mc) { + freeMalBlk(mb); throw(SQL, "sql.prepare", SQLSTATE(HY001) MAL_MALLOC_FAIL); } retc = p->retc; @@ -323,8 +324,10 @@ SQLrun(Client c, backend *be, mvc *m) throw(SQL, "sql.prepare", SQLSTATE(07001) "EXEC: wrong type for argument %d of " "query template : %s, expected %s", i + 1, atom_type(arg)->type->sqlname, pt->type->sqlname); } val= (ValPtr) &arg->data; - if (VALcopy(&mb->var[j+retc].value, val) == NULL) + if (VALcopy(&mb->var[j+retc].value, val) == NULL){ + freeMalBlk(mb); throw(MAL, "sql.prepare", SQLSTATE(HY001) MAL_MALLOC_FAIL); + } setVarConstant(mb, j+retc); setVarFixed(mb, j+retc); } @@ -337,10 +340,14 @@ SQLrun(Client c, backend *be, mvc *m) if( m->emod & mod_debug) mb->keephistory = TRUE; msg = SQLoptimizeQuery(c, mb); + if( msg != MAL_SUCCEED){ + // freeMalBlk(mb); + return msg; + } mb->keephistory = FALSE; if (mb->errors){ - //freeMalBlk(mb); + // freeMalBlk(mb); // mal block might be so broken free causes segfault return msg; } @@ -507,6 +514,8 @@ SQLstatementIntern(Client c, str *expr, if (!m->sa) m->sa = sa_create(); if (!m->sa) { + *m = *o; + _DELETE(o); bstream_destroy(m->scanner.rs); throw(SQL,"sql.statement",MAL_MALLOC_FAIL); } @@ -830,7 +839,8 @@ RAstatement(Client c, MalBlkPtr mb, MalS msg = SQLoptimizeFunction(c,c->curprg->def); } rel_destroy(rel); - SQLrun(c,b,m); + if( msg == MAL_SUCCEED) + msg = SQLrun(c,b,m); if (!msg) { resetMalBlk(c->curprg->def, oldstop); freeVariables(c, c->curprg->def, NULL, oldvtop); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list