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