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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list