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

Reply via email to