Changeset: 47ceb492c503 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=47ceb492c503
Modified Files:
monetdb5/mal/mal_interpreter.c
monetdb5/modules/atoms/json.c
monetdb5/modules/mal/groupby.c
monetdb5/modules/mal/mdb.c
Branch: Jun2016
Log Message:
Plug some memory holes.
diffs (104 lines):
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -744,6 +744,9 @@ str runMALsequence(Client cntxt, MalBlkP
BBPincref(lhs->val.bval, TRUE);
}
ret = runMALsequence(cntxt, pci->blk,
1, pci->blk->stop, nstk, stk, pci);
+ for (ii = 0; ii < nstk->stktop; ii++)
+ if
(ATOMextern(nstk->stk[ii].vtype))
+
GDKfree(nstk->stk[ii].val.pval);
GDKfree(nstk);
}
break;
diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -588,7 +588,7 @@ JSONfilterInternal(json *ret, json *js,
memset(terms, 0, sizeof(terms));
msg = JSONcompile(*expr, terms);
if (msg)
- return msg;
+ goto bailout;
result = s = JSONmatch(jt, 0, terms, tidx);
// process all other PATH expression
@@ -606,12 +606,13 @@ JSONfilterInternal(json *ret, json *js,
s = GDKzalloc(l + 3);
snprintf(s, l + 3, "[%s]", (result ? result : ""));
GDKfree(result);
+ *ret = s;
- for (l = 0; terms[l].token; l++)
+ bailout:
+ for (l = 0; l < MAXTERMS; l++)
if (terms[l].name)
GDKfree(terms[l].name);
JSONfree(jt);
- *ret = s;
return msg;
}
@@ -1175,26 +1176,25 @@ JSONunfoldContainer(JSON *jt, int idx, B
GDKfree(r);
r = JSONgetValue(jt, jt->elm[i].child);
BUNappend(bv, r, FALSE);
+ GDKfree(r);
if (bo)
BUNappend(bo, o, FALSE);
(*o)++;
- GDKfree(r);
if (i == last)
break;
} else if (jt->elm[idx].kind == JSON_ARRAY)
for (i = jt->elm[idx].next; i; i = jt->elm[i].next) {
- r = GDKstrdup(str_nil);
- BUNappend(bk, r, FALSE);
+ BUNappend(bk, str_nil, FALSE);
if (jt->elm[i].kind == JSON_VALUE)
r = JSONgetValue(jt, jt->elm[i].child);
else
r = JSONgetValue(jt, i);
BUNappend(bv, r, FALSE);
+ GDKfree(r);
if (bo)
BUNappend(bo, o, FALSE);
(*o)++;
cnt++;
- GDKfree(r);
if (i == last)
break;
}
diff --git a/monetdb5/modules/mal/groupby.c b/monetdb5/modules/mal/groupby.c
--- a/monetdb5/modules/mal/groupby.c
+++ b/monetdb5/modules/mal/groupby.c
@@ -78,7 +78,7 @@ GROUPcollect( Client cntxt, MalBlkPtr mb
if(a->cols) GDKfree(a->cols);
if(a->bid) GDKfree(a->bid);
if(a->unique) GDKfree(a->unique);
- if(a) GDKfree(a);
+ GDKfree(a);
return NULL;
}
for ( i= pci->retc; i< pci->argc; i++, a->last++) {
@@ -87,6 +87,9 @@ GROUPcollect( Client cntxt, MalBlkPtr mb
if ( a->cols[a->last] == NULL){
for(a->last--; a->last>=0; a->last--)
BBPunfix(a->cols[a->last]->batCacheid);
+ GDKfree(a->cols);
+ GDKfree(a->bid);
+ GDKfree(a->unique);
GDKfree(a);
return NULL;
}
diff --git a/monetdb5/modules/mal/mdb.c b/monetdb5/modules/mal/mdb.c
--- a/monetdb5/modules/mal/mdb.c
+++ b/monetdb5/modules/mal/mdb.c
@@ -295,6 +295,7 @@ MDBgetFrame(BAT *b, BAT*bn, Client cntxt
ATOMformat(v->vtype, VALptr(v), &buf);
BUNappend(b, getVarName(mb, i), FALSE);
BUNappend(bn, buf, FALSE);
+ GDKfree(buf);
}
return MAL_SUCCEED;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list