Changeset: a4c56c3fd26d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a4c56c3fd26d Modified Files: gdk/gdk.h gdk/gdk_align.c monetdb5/modules/mal/mat.c sql/backends/monet5/sql.c sql/storage/bat/bat_storage.c sql/storage/bat/bat_table.c Branch: default Log Message:
Check ALL calls to BATappend and add GCC attribute. diffs (179 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -1263,7 +1263,8 @@ gdk_export bte ATOMelmshift(int sz); 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) __attribute__ ((__warn_unused_result__)); -gdk_export gdk_return BATappend(BAT *b, BAT *n, BAT *s, bit force); +gdk_export gdk_return BATappend(BAT *b, BAT *n, BAT *s, bit force) + __attribute__ ((__warn_unused_result__)); gdk_export gdk_return BUNdelete(BAT *b, oid o); gdk_export gdk_return BATdel(BAT *b, BAT *d); diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c --- a/gdk/gdk_align.c +++ b/gdk/gdk_align.c @@ -421,7 +421,8 @@ VIEWreset(BAT *b) b->batCapacity = cnt; /* insert all of v in b, and quit */ - BATappend(b, v, NULL, FALSE); + if (BATappend(b, v, NULL, FALSE) != GDK_SUCCEED) + goto bailout; BBPreclaim(v); } return GDK_SUCCEED; diff --git a/monetdb5/modules/mal/mat.c b/monetdb5/modules/mal/mat.c --- a/monetdb5/modules/mal/mat.c +++ b/monetdb5/modules/mal/mat.c @@ -77,7 +77,11 @@ MATpackInternal(Client cntxt, MalBlkPtr BAThseqbase(bn, b->hseqbase); BATtseqbase(bn, b->tseqbase); } - BATappend(bn, b, NULL, FALSE); + if (BATappend(bn, b, NULL, FALSE) != GDK_SUCCEED) { + BBPunfix(bn->batCacheid); + BBPunfix(b->batCacheid); + throw(MAL, "mat.pack", GDK_EXCEPTION); + } BBPunfix(b->batCacheid); } } @@ -117,7 +121,11 @@ MATpackIncrement(Client cntxt, MalBlkPtr throw(MAL, "mat.pack", MAL_MALLOC_FAIL); } BATtseqbase(bn, b->tseqbase); - BATappend(bn, b, NULL, FALSE); + if (BATappend(bn, b, NULL, FALSE) != GDK_SUCCEED) { + BBPunfix(bn->batCacheid); + BBPunfix(b->batCacheid); + throw(MAL, "mat.pack", GDK_EXCEPTION); + } assert(!bn->tnil || !bn->tnonil); bn->S.unused = (pieces-1); /* misuse "unused" field */ BBPkeepref(*ret = bn->batCacheid); @@ -130,7 +138,11 @@ MATpackIncrement(Client cntxt, MalBlkPtr BAThseqbase(b, bb->hseqbase); BATtseqbase(b, bb->tseqbase); } - BATappend(b, bb, NULL, FALSE); + if (BATappend(b, bb, NULL, FALSE) != GDK_SUCCEED) { + BBPunfix(bb->batCacheid); + BBPunfix(b->batCacheid); + throw(MAL, "mat.pack", GDK_EXCEPTION); + } } b->S.unused--; if(b->S.unused == 0) 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 @@ -1288,7 +1288,11 @@ DELTAbat(bat *result, const bat *col, co if (i && BATcount(i)) { i = BATdescriptor(*ins); - BATappend(res, i, NULL, TRUE); + if (BATappend(res, i, NULL, TRUE) != GDK_SUCCEED) { + BBPunfix(res->batCacheid); + BBPunfix(i->batCacheid); + throw(MAL, "sql.delta", GDK_EXCEPTION); + } BBPunfix(i->batCacheid); } diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c --- a/sql/storage/bat/bat_storage.c +++ b/sql/storage/bat/bat_storage.c @@ -640,10 +640,16 @@ delta_append_bat( sql_delta *bat, BAT *i } if (isVIEW(i) && b->batCacheid == VIEWtparent(i)) { BAT *ic = COLcopy(i, i->ttype, TRUE, TRANSIENT); - BATappend(b, ic, NULL, TRUE); + if (BATappend(b, ic, NULL, TRUE) != GDK_SUCCEED) { + bat_destroy(ic); + bat_destroy(b); + return LOG_ERR; + } bat_destroy(ic); - } else - BATappend(b, i, NULL, TRUE); + } else if (BATappend(b, i, NULL, TRUE) != GDK_SUCCEED) { + bat_destroy(b); + return LOG_ERR; + } assert(BUNlast(b) > b->batInserted); bat_destroy(b); } @@ -835,7 +841,10 @@ delta_delete_bat( sql_dbat *bat, BAT *i b = temp_descriptor(bat->dbid); } assert(b->theap.storage != STORE_PRIV); - BATappend(b, i, NULL, TRUE); + if (BATappend(b, i, NULL, TRUE) != GDK_SUCCEED) { + bat_destroy(b); + return LOG_ERR; + } BATkey(b, TRUE); bat_destroy(b); @@ -1892,7 +1901,11 @@ gtr_update_delta( sql_trans *tr, sql_del if (BUNlast(ins) > 0) { (*changes)++; assert(cur->theap.storage != STORE_PRIV); - BATappend(cur, ins, NULL, TRUE); + if (BATappend(cur, ins, NULL, TRUE) != GDK_SUCCEED) { + bat_destroy(ins); + bat_destroy(cur); + return LOG_ERR; + } cbat->cnt = cbat->ibase = BATcount(cur); BATcleanProps(cur); temp_destroy(cbat->ibid); @@ -2147,7 +2160,11 @@ tr_update_delta( sql_trans *tr, sql_delt assert((BATcount(cur) + BATcount(ins)) == cbat->cnt); //assert((BATcount(cur) + BATcount(ins)) == (obat->cnt + (BUNlast(ins) - ins->batInserted))); assert(!BATcount(ins) || !isEbat(ins)); - BATappend(cur, ins, NULL, TRUE); + if (BATappend(cur, ins, NULL, TRUE) != GDK_SUCCEED) { + bat_destroy(cur); + bat_destroy(ins); + return LOG_ERR; + } BATcleanProps(cur); temp_destroy(cbat->bid); temp_destroy(cbat->ibid); @@ -2227,7 +2244,11 @@ tr_merge_delta( sql_trans *tr, sql_delta ins = cur; cur = newcur; } else { - BATappend(cur, ins, NULL, TRUE); + if (BATappend(cur, ins, NULL, TRUE) != GDK_SUCCEED) { + bat_destroy(cur); + bat_destroy(ins); + return LOG_ERR; + } BATcleanProps(cur); if (cur->batPersistence == PERSISTENT) BATmsync(cur); diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c --- a/sql/storage/bat/bat_table.c +++ b/sql/storage/bat/bat_table.c @@ -83,8 +83,16 @@ delta_full_bat_( sql_column *c, sql_delt if (BATcount(i)) { r = COLcopy(b, b->ttype, 1, TRANSIENT); bat_destroy(b); + if (r == NULL) { + bat_destroy(i); + return NULL; + } b = r; - BATappend(b, i, NULL, TRUE); + if (BATappend(b, i, NULL, TRUE) != GDK_SUCCEED) { + bat_destroy(b); + bat_destroy(i); + return NULL; + } needcopy = 0; } bat_destroy(i); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list