Changeset: a1aeb1474572 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a1aeb1474572
Modified Files:
        monetdb5/modules/atoms/json.c
        monetdb5/modules/kernel/batmmath.c
        monetdb5/modules/mal/pcre.c
        sql/backends/monet5/datacell/basket.c
        sql/backends/monet5/sql.c
        sql/storage/bat/bat_logger.c
Branch: default
Log Message:

Check more result of BATnew.


diffs (216 lines):

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
@@ -1127,6 +1127,8 @@ JSONkeyTable(int *ret, json *js)
 
        jt= JSONparse(*js, TRUE); // already validated
        bn = BATnew(TYPE_void, TYPE_str, 64, TRANSIENT);
+       if (bn == NULL)
+               throw(MAL, "json.keys", MAL_MALLOC_FAIL);
        BATseqbase(bn, 0);
        bn->hsorted = 1;
        bn->hrevsorted = 0;
@@ -1180,6 +1182,8 @@ JSONvalueTable(int *ret, json *js)
 
        jt= JSONparse(*js, TRUE); // already validated
        bn = BATnew(TYPE_void, TYPE_str, 64, TRANSIENT);
+       if (bn == NULL)
+               throw(MAL, "json.values", MAL_MALLOC_FAIL);
        BATseqbase(bn, 0);
        bn->hsorted = 1;
        bn->hrevsorted = 0;
diff --git a/monetdb5/modules/kernel/batmmath.c 
b/monetdb5/modules/kernel/batmmath.c
--- a/monetdb5/modules/kernel/batmmath.c
+++ b/monetdb5/modules/kernel/batmmath.c
@@ -33,6 +33,7 @@
 #define voidresultBAT(X1,X2)\
        bn = BATnew(TYPE_void, X1, BATcount(b), TRANSIENT);\
        if (bn == NULL) {\
+               BBPreleaseref(b->batCacheid);\
                throw(MAL, X2, MAL_MALLOC_FAIL);\
        }\
        BATseqbase(bn, b->hseqbase);\
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -627,6 +627,7 @@ pcre_select(BAT **res, const char *patte
        if (r == NULL)
                throw(MAL, "pcre_select", MAL_MALLOC_FAIL);
        if ((re = pcre_compile(pattern, options, &err_p, &errpos, NULL)) == 
NULL) {
+               BBPreclaim(r);
                throw(MAL, "pcre_select", OPERATION_FAILED "pcre compile of 
pattern (%s) failed at %d with\n'%s'.",
                        pattern, errpos, err_p);
        }
diff --git a/sql/backends/monet5/datacell/basket.c 
b/sql/backends/monet5/datacell/basket.c
--- a/sql/backends/monet5/datacell/basket.c
+++ b/sql/backends/monet5/datacell/basket.c
@@ -147,20 +147,47 @@ BSKTnewbasket(sql_schema *s, sql_table *
        baskets[idx].cols = GDKzalloc((baskets[idx].colcount + 1) * 
sizeof(str));
        baskets[idx].primary = GDKzalloc((baskets[idx].colcount + 1) * 
sizeof(BAT *));
        baskets[idx].errors = BATnew(TYPE_void, TYPE_str, BATTINY, TRANSIENT);
+       if (baskets[idx].name == NULL ||
+           baskets[idx].cols == NULL ||
+           baskets[idx].primary == NULL ||
+           baskets[idx].errors == NULL) {
+               msg = MAL_MALLOC_FAIL;
+               goto bailout;
+       }
 
        i = 0;
-       for (o = t->columns.set->h; msg == MAL_SUCCEED && o; o = o->next) {
+       for (o = t->columns.set->h; o; o = o->next) {
                c = o->data;
                b = store_funcs.bind_col(tr, c, 0);
                if (b == NULL) {
-                       MT_lock_unset(&mal_contextLock, "register");
-                       throw(SQL, "sql.basket", "Can not access descriptor");
+                       msg = "Can not access descriptor";
+                       goto bailout;
                }
                baskets[idx].primary[i] = b;
-               baskets[idx].cols[i++] = GDKstrdup(c->base.name);
+               if ((baskets[idx].cols[i++] = GDKstrdup(c->base.name)) == NULL) 
{
+                       msg = MAL_MALLOC_FAIL;
+                       goto bailout;
+               }
        }
        MT_lock_unset(&mal_contextLock, "register");
        return MAL_SUCCEED;
+
+  bailout:
+       GDKfree(baskets[idx].name);
+       baskets[idx].name = NULL;
+       if (baskets[idx].cols) {
+               for (i = 0; i < baskets[idx].colcount; i++)
+                       GDKfree(baskets[idx].cols[i]);
+               GDKfree(baskets[idx].cols);
+               baskets[idx].cols = NULL;
+       }
+       GDKfree(baskets[idx].primary);
+       baskets[idx].primary = NULL;
+       BBPreclaim(baskets[idx].errors);
+       baskets[idx].errors = NULL;
+       MT_lock_destroy(&baskets[idx].lock);
+       MT_lock_unset(&mal_contextLock, "register");
+       throw(SQL, "sql.basket", "%s", msg);
 }
 
 str
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -4603,6 +4603,10 @@ BATSTRindex_int(bat *res, bat *src, bit 
                int v;
 
                r = BATnew(TYPE_void, TYPE_int, 1024, TRANSIENT);
+               if (r == NULL) {
+                       BBPunfix(s->batCacheid);
+                       throw(SQL, "calc.index", MAL_MALLOC_FAIL);
+               }
                BATseqbase(r, 0);
                pos = GDK_STRHASHSIZE;
                while (pos < h->free) {
@@ -4619,6 +4623,10 @@ BATSTRindex_int(bat *res, bat *src, bit 
                }
        } else {
                r = VIEWcreate(s, s);
+               if (r == NULL) {
+                       BBPunfix(s->batCacheid);
+                       throw(SQL, "calc.index", MAL_MALLOC_FAIL);
+               }
                r->ttype = TYPE_int;
                r->tvarsized = 0;
                r->T->vheap = NULL;
@@ -4651,6 +4659,10 @@ BATSTRindex_sht(bat *res, bat *src, bit 
                sht v;
 
                r = BATnew(TYPE_void, TYPE_sht, 1024, TRANSIENT);
+               if (r == NULL) {
+                       BBPunfix(s->batCacheid);
+                       throw(SQL, "calc.index", MAL_MALLOC_FAIL);
+               }
                BATseqbase(r, 0);
                pos = GDK_STRHASHSIZE;
                while (pos < h->free) {
@@ -4667,6 +4679,10 @@ BATSTRindex_sht(bat *res, bat *src, bit 
                }
        } else {
                r = VIEWcreate(s, s);
+               if (r == NULL) {
+                       BBPunfix(s->batCacheid);
+                       throw(SQL, "calc.index", MAL_MALLOC_FAIL);
+               }
                r->ttype = TYPE_sht;
                r->tvarsized = 0;
                r->T->vheap = NULL;
@@ -4699,6 +4715,10 @@ BATSTRindex_bte(bat *res, bat *src, bit 
                bte v;
 
                r = BATnew(TYPE_void, TYPE_bte, 64, TRANSIENT);
+               if (r == NULL) {
+                       BBPunfix(s->batCacheid);
+                       throw(SQL, "calc.index", MAL_MALLOC_FAIL);
+               }
                BATseqbase(r, 0);
                pos = GDK_STRHASHSIZE;
                while (pos < h->free) {
@@ -4715,6 +4735,10 @@ BATSTRindex_bte(bat *res, bat *src, bit 
                }
        } else {
                r = VIEWcreate(s, s);
+               if (r == NULL) {
+                       BBPunfix(s->batCacheid);
+                       throw(SQL, "calc.index", MAL_MALLOC_FAIL);
+               }
                r->ttype = TYPE_bte;
                r->tvarsized = 0;
                r->T->vheap = NULL;
@@ -4746,6 +4770,10 @@ BATSTRstrings(bat *res, bat *src)
                h = s->T->vheap;
                extralen = h->hashash ? EXTRALEN : 0;
        r = BATnew(TYPE_void, TYPE_str, 1024, TRANSIENT);
+       if (r == NULL) {
+               BBPunfix(s->batCacheid);
+               throw(SQL, "calc.strings", MAL_MALLOC_FAIL);
+       }
        BATseqbase(r, 0);
        pos = GDK_STRHASHSIZE;
        while (pos < h->free) {
diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c
--- a/sql/storage/bat/bat_logger.c
+++ b/sql/storage/bat/bat_logger.c
@@ -91,9 +91,9 @@ bl_postversion( void *lg)
                        return;
                bi = bat_iterator(b);
                b1 = BATnew(TYPE_void, TYPE_bit, BATcount(b), PERSISTENT);
-               BATseqbase(b1, b->hseqbase);
                if (!b1)
                        return;
+               BATseqbase(b1, b->hseqbase);
                /* only sys and tmp are system schemas */
                for(p=BUNfirst(b), q=BUNlast(b); p<q; p++) {
                        bit v = FALSE;
@@ -113,9 +113,9 @@ bl_postversion( void *lg)
                        return;
                bi = bat_iterator(b);
                b1 = BATnew(TYPE_void, TYPE_bit, BATcount(b), PERSISTENT);
-               BATseqbase(b1, b->hseqbase);
                if (!b1)
                        return;
+               BATseqbase(b1, b->hseqbase);
                /* default to ARG_IN, names starting with 'res' are ARG_OUT */
                bi = bat_iterator(b);
                for(p=BUNfirst(b), q=BUNlast(b); p<q; p++) {
@@ -137,10 +137,10 @@ bl_postversion( void *lg)
                bi = bat_iterator(b);
                b1 = BATnew(TYPE_void, TYPE_bit, BATcount(b), PERSISTENT);
                b2 = BATnew(TYPE_void, TYPE_bit, BATcount(b), PERSISTENT);
+               if (!b1 || !b2)
+                       return;
                BATseqbase(b1, b->hseqbase);
                BATseqbase(b2, b->hseqbase);
-               if (!b1 || !b2)
-                       return;
                /* default to no variaable arguments and results */
                for(p=BUNfirst(b), q=BUNlast(b); p<q; p++) {
                        bit v = FALSE;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to