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