Changeset: 024496432997 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=024496432997 Modified Files: gdk/gdk.h sql/backends/monet5/sql.c sql/backends/monet5/sql_bat2time.c sql/backends/monet5/sql_cast.c sql/backends/monet5/sql_execute.c sql/backends/monet5/sql_result.c sql/backends/monet5/sql_round_impl.h sql/backends/monet5/vaults/bam/bam_lib.c sql/backends/monet5/vaults/fits/fits.c sql/backends/monet5/vaults/shp/shp.c sql/storage/bat/bat_storage.c sql/storage/bat/bat_utils.c sql/storage/bat/res_table.c Branch: default Log Message:
ALL calls to BUNappend are now checked. Added GCC function attribute to keep
it that way.
diffs (truncated from 1176 to 300 lines):
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1261,7 +1261,8 @@ gdk_export bte ATOMelmshift(int sz);
} while (0)
gdk_export gdk_return GDKupgradevarheap(BAT *b, var_t v, int copyall, int
mayshare);
-gdk_export gdk_return BUNappend(BAT *b, const void *right, bit force);
+gdk_export gdk_return BUNappend(BAT *b, const void *right, bit force)
+ __attribute__ ((__warn_unused_result__));
gdk_export gdk_return BATappend(BAT *b, BAT *n, BAT *s, bit force);
gdk_export gdk_return BUNdelete(BAT *b, oid o);
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
@@ -2409,7 +2409,8 @@ mvc_scalar_value_wrap(Client cntxt, MalB
// scalar values are single-column result sets
res_id = mvc_result_table(b->mvc, mb->tag, 1, 1, NULL);
- mvc_result_value(b->mvc, *tn, *cn, *type, *digits, *scale, p, mtype);
+ if (mvc_result_value(b->mvc, *tn, *cn, *type, *digits, *scale, p,
mtype))
+ throw(SQL, "sql.exportValue", "failed");
if (b->output_format == OFMT_NONE) {
return MAL_SUCCEED;
}
@@ -4038,41 +4039,7 @@ sql_storage(Client cntxt, MalBlkPtr mb,
if (sch == NULL || tab == NULL || col == NULL || type == NULL || mode
== NULL || loc == NULL || imprints == NULL ||
sort == NULL || cnt == NULL || atom == NULL || size == NULL || heap
== NULL || indices == NULL || phash == NULL ||
revsort == NULL || key == NULL || oidx == NULL) {
- if (sch)
- BBPunfix(sch->batCacheid);
- if (tab)
- BBPunfix(tab->batCacheid);
- if (col)
- BBPunfix(col->batCacheid);
- if (mode)
- BBPunfix(mode->batCacheid);
- if (loc)
- BBPunfix(loc->batCacheid);
- if (cnt)
- BBPunfix(cnt->batCacheid);
- if (type)
- BBPunfix(type->batCacheid);
- if (atom)
- BBPunfix(atom->batCacheid);
- if (size)
- BBPunfix(size->batCacheid);
- if (heap)
- BBPunfix(heap->batCacheid);
- if (indices)
- BBPunfix(indices->batCacheid);
- if (phash)
- BBPunfix(phash->batCacheid);
- if (imprints)
- BBPunfix(imprints->batCacheid);
- if (sort)
- BBPunfix(sort->batCacheid);
- if (revsort)
- BBPunfix(revsort->batCacheid);
- if (key)
- BBPunfix(key->batCacheid);
- if (oidx)
- BBPunfix(oidx->batCacheid);
- throw(SQL, "sql.storage", MAL_MALLOC_FAIL);
+ goto bailout;
}
if( pci->argc - pci->retc >= 1)
sname = *getArgReference_str(stk, pci, pci->retc);
@@ -4109,25 +4076,34 @@ sql_storage(Client cntxt, MalBlkPtr mb,
throw(SQL, "sql.storage", "Can not access column");
/*printf("schema %s.%s.%s" , b->name, bt->name, bc->name); */
- BUNappend(sch,
b->name, FALSE);
- BUNappend(tab,
bt->name, FALSE);
- BUNappend(col,
bc->name, FALSE);
- if
(c->t->access == TABLE_WRITABLE)
-
BUNappend(mode, "writable", FALSE);
- else if
(c->t->access == TABLE_APPENDONLY)
-
BUNappend(mode, "appendonly", FALSE);
- else if
(c->t->access == TABLE_READONLY)
-
BUNappend(mode, "readonly", FALSE);
- else
-
BUNappend(mode, 0, FALSE);
- BUNappend(type,
c->type.type->sqlname, FALSE);
+ if
(BUNappend(sch, b->name, FALSE) != GDK_SUCCEED ||
+
BUNappend(tab, bt->name, FALSE) != GDK_SUCCEED ||
+
BUNappend(col, bc->name, FALSE) != GDK_SUCCEED)
+ goto
bailout;
+ if
(c->t->access == TABLE_WRITABLE) {
+ if
(BUNappend(mode, "writable", FALSE) != GDK_SUCCEED)
+
goto bailout;
+ } else if
(c->t->access == TABLE_APPENDONLY) {
+ if
(BUNappend(mode, "appendonly", FALSE) != GDK_SUCCEED)
+
goto bailout;
+ } else if
(c->t->access == TABLE_READONLY) {
+ if
(BUNappend(mode, "readonly", FALSE) != GDK_SUCCEED)
+
goto bailout;
+ } else {
+ if
(BUNappend(mode, 0, FALSE) != GDK_SUCCEED)
+
goto bailout;
+ }
+ if
(BUNappend(type, c->type.type->sqlname, FALSE) != GDK_SUCCEED)
+ goto
bailout;
/*printf(" cnt
"BUNFMT, BATcount(bn)); */
sz =
BATcount(bn);
- BUNappend(cnt,
&sz, FALSE);
+ if
(BUNappend(cnt, &sz, FALSE) != GDK_SUCCEED)
+ goto
bailout;
/*printf(" loc
%s", BBP_physical(bn->batCacheid)); */
- BUNappend(loc,
BBP_physical(bn->batCacheid), FALSE);
+ if
(BUNappend(loc, BBP_physical(bn->batCacheid), FALSE) != GDK_SUCCEED)
+ goto
bailout;
/*printf("
width %d", bn->twidth); */
w = bn->twidth;
if (bn->ttype
== TYPE_str) {
@@ -4149,42 +4125,52 @@ sql_storage(Client cntxt, MalBlkPtr mb,
if
(cnt2)
w = (int) (sum / cnt2);
}
- BUNappend(atom,
&w, FALSE);
+ if
(BUNappend(atom, &w, FALSE) != GDK_SUCCEED)
+ goto
bailout;
sz =
BATcount(bn) * bn->twidth;
- BUNappend(size,
&sz, FALSE);
+ if
(BUNappend(size, &sz, FALSE) != GDK_SUCCEED)
+ goto
bailout;
sz =
heapinfo(bn->tvheap, bn->batCacheid);
- BUNappend(heap,
&sz, FALSE);
+ if
(BUNappend(heap, &sz, FALSE) != GDK_SUCCEED)
+ goto
bailout;
sz =
hashinfo(bn->thash, bn->batCacheid);
-
BUNappend(indices, &sz, FALSE);
+ if
(BUNappend(indices, &sz, FALSE) != GDK_SUCCEED)
+ goto
bailout;
bitval = 0; /*
HASHispersistent(bn); */
-
BUNappend(phash, &bitval, FALSE);
+ if
(BUNappend(phash, &bitval, FALSE) != GDK_SUCCEED)
+ goto
bailout;
sz =
IMPSimprintsize(bn);
-
BUNappend(imprints, &sz, FALSE);
+ if
(BUNappend(imprints, &sz, FALSE) != GDK_SUCCEED)
+ goto
bailout;
/*printf("
indices "BUNFMT, bn->thash?bn->thash->heap->size:0); */
/*printf("\n");
*/
bitval =
BATtordered(bn);
if (!bitval &&
bn->tnosorted == 0)
bitval
= bit_nil;
- BUNappend(sort,
&bitval, FALSE);
+ if
(BUNappend(sort, &bitval, FALSE) != GDK_SUCCEED)
+ goto
bailout;
bitval =
BATtrevordered(bn);
if (!bitval &&
bn->tnorevsorted == 0)
bitval
= bit_nil;
-
BUNappend(revsort, &bitval, FALSE);
+ if
(BUNappend(revsort, &bitval, FALSE) != GDK_SUCCEED)
+ goto
bailout;
bitval =
BATtkey(bn);
if (!bitval &&
bn->tnokey[0] == 0 && bn->tnokey[1] == 0)
bitval
= bit_nil;
- BUNappend(key,
&bitval, FALSE);
+ if
(BUNappend(key, &bitval, FALSE) != GDK_SUCCEED)
+ goto
bailout;
sz =
bn->torderidx && bn->torderidx != (Heap *) 1 ? bn->torderidx->free : 0;
- BUNappend(oidx,
&sz, FALSE);
+ if
(BUNappend(oidx, &sz, FALSE) != GDK_SUCCEED)
+ goto
bailout;
BBPunfix(bn->batCacheid);
}
@@ -4202,25 +4188,34 @@ sql_storage(Client cntxt, MalBlkPtr mb,
if(
cname && strcmp(bc->name, cname) )
continue;
/*printf("schema %s.%s.%s" , b->name, bt->name, bc->name); */
-
BUNappend(sch, b->name, FALSE);
-
BUNappend(tab, bt->name, FALSE);
-
BUNappend(col, bc->name, FALSE);
- if
(c->t->access == TABLE_WRITABLE)
-
BUNappend(mode, "writable", FALSE);
- else if
(c->t->access == TABLE_APPENDONLY)
-
BUNappend(mode, "appendonly", FALSE);
- else if
(c->t->access == TABLE_READONLY)
-
BUNappend(mode, "readonly", FALSE);
- else
-
BUNappend(mode, 0, FALSE);
-
BUNappend(type, "oid", FALSE);
+ if
(BUNappend(sch, b->name, FALSE) != GDK_SUCCEED ||
+
BUNappend(tab, bt->name, FALSE) != GDK_SUCCEED ||
+
BUNappend(col, bc->name, FALSE) != GDK_SUCCEED)
+
goto bailout;
+ if
(c->t->access == TABLE_WRITABLE) {
+
if (BUNappend(mode, "writable", FALSE) != GDK_SUCCEED)
+
goto bailout;
+ } else
if (c->t->access == TABLE_APPENDONLY) {
+
if (BUNappend(mode, "appendonly", FALSE) != GDK_SUCCEED)
+
goto bailout;
+ } else
if (c->t->access == TABLE_READONLY) {
+
if (BUNappend(mode, "readonly", FALSE) != GDK_SUCCEED)
+
goto bailout;
+ } else {
+
if (BUNappend(mode, 0, FALSE) != GDK_SUCCEED)
+
goto bailout;
+ }
+ if
(BUNappend(type, "oid", FALSE) != GDK_SUCCEED)
+
goto bailout;
/*printf(" cnt "BUNFMT, BATcount(bn)); */
sz =
BATcount(bn);
-
BUNappend(cnt, &sz, FALSE);
+ if
(BUNappend(cnt, &sz, FALSE) != GDK_SUCCEED)
+
goto bailout;
/*printf(" loc %s", BBP_physical(bn->batCacheid)); */
-
BUNappend(loc, BBP_physical(bn->batCacheid), FALSE);
+ if
(BUNappend(loc, BBP_physical(bn->batCacheid), FALSE) != GDK_SUCCEED)
+
goto bailout;
/*printf(" width %d", bn->twidth); */
w =
bn->twidth;
if
(bn->ttype == TYPE_str) {
@@ -4242,37 +4237,47 @@ sql_storage(Client cntxt, MalBlkPtr mb,
if (cnt2)
w = (int) (sum / cnt2);
}
-
BUNappend(atom, &w, FALSE);
+ if
(BUNappend(atom, &w, FALSE) != GDK_SUCCEED)
+
goto bailout;
/*printf(" size "BUNFMT, tailsize(bn,BATcount(bn)) + (bn->tvheap?
bn->tvheap->size:0)); */
sz =
tailsize(bn, BATcount(bn));
-
BUNappend(size, &sz, FALSE);
+ if
(BUNappend(size, &sz, FALSE) != GDK_SUCCEED)
+
goto bailout;
sz =
bn->tvheap ? bn->tvheap->size : 0;
-
BUNappend(heap, &sz, FALSE);
+ if
(BUNappend(heap, &sz, FALSE) != GDK_SUCCEED)
+
goto bailout;
sz =
bn->thash && bn->thash != (Hash *) 1 ? bn->thash->heap->size : 0; /* HASHsize()
*/
-
BUNappend(indices, &sz, FALSE);
+ if
(BUNappend(indices, &sz, FALSE) != GDK_SUCCEED)
+
goto bailout;
bitval
= 0; /* HASHispersistent(bn); */
-
BUNappend(phash, &bitval, FALSE);
+ if
(BUNappend(phash, &bitval, FALSE) != GDK_SUCCEED)
+
goto bailout;
sz =
IMPSimprintsize(bn);
-
BUNappend(imprints, &sz, FALSE);
+ if
(BUNappend(imprints, &sz, FALSE) != GDK_SUCCEED)
+
goto bailout;
/*printf(" indices "BUNFMT, bn->thash?bn->thash->heap->size:0); */
/*printf("\n"); */
bitval
= BATtordered(bn);
if
(!bitval && bn->tnosorted == 0)
bitval = bit_nil;
-
BUNappend(sort, &bitval, FALSE);
+ if
(BUNappend(sort, &bitval, FALSE) != GDK_SUCCEED)
+
goto bailout;
bitval
= BATtrevordered(bn);
if
(!bitval && bn->tnorevsorted == 0)
bitval = bit_nil;
-
BUNappend(revsort, &bitval, FALSE);
+ if
(BUNappend(revsort, &bitval, FALSE) != GDK_SUCCEED)
+
goto bailout;
bitval
= BATtkey(bn);
if
(!bitval && bn->tnokey[0] == 0 && bn->tnokey[1] == 0)
bitval = bit_nil;
-
BUNappend(key, &bitval, FALSE);
+ if
(BUNappend(key, &bitval, FALSE) != GDK_SUCCEED)
+
goto bailout;
sz =
bn->torderidx && bn->torderidx != (Heap *) 1 ? bn->torderidx->free : 0;
-
BUNappend(oidx, &sz, FALSE);
+ if
(BUNappend(oidx, &sz, FALSE) != GDK_SUCCEED)
+
goto bailout;
BBPunfix(bn->batCacheid);
}
}
@@ -4298,6 +4303,43 @@ sql_storage(Client cntxt, MalBlkPtr mb,
BBPkeepref(*rkey = key->batCacheid);
BBPkeepref(*roidx = oidx->batCacheid);
return MAL_SUCCEED;
+
+ bailout:
+ if (sch)
+ BBPunfix(sch->batCacheid);
+ if (tab)
+ BBPunfix(tab->batCacheid);
+ if (col)
+ BBPunfix(col->batCacheid);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
