Changeset: a9f1353c4b65 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a9f1353c4b65 Modified Files: monetdb5/mal/mal_authorize.c monetdb5/modules/mal/wlc.c sql/backends/monet5/sql_rank.c sql/backends/monet5/vaults/netcdf/netcdf.c Branch: Mar2018 Log Message:
More BAT descriptor checks diffs (202 lines): diff --git a/monetdb5/mal/mal_authorize.c b/monetdb5/mal/mal_authorize.c --- a/monetdb5/mal/mal_authorize.c +++ b/monetdb5/mal/mal_authorize.c @@ -183,6 +183,8 @@ AUTHinitTables(const char *passwd) { /* don't check this bat since we'll fix it below */ GDKdebug &= ~CHECKMASK; user = BATdescriptor(bid); + if (user == NULL) + throw(MAL, "initTables.user", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); GDKdebug = dbg; isNew = 0; } @@ -204,6 +206,8 @@ AUTHinitTables(const char *passwd) { /* don't check this bat since we'll fix it below */ GDKdebug &= ~CHECKMASK; pass = BATdescriptor(bid); + if (pass == NULL) + throw(MAL, "initTables.passwd", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); GDKdebug = dbg; isNew = 0; } @@ -224,6 +228,8 @@ AUTHinitTables(const char *passwd) { AUTHcommit(); } else { duser = BATdescriptor(bid); + if (duser == NULL) + throw(MAL, "initTables.duser", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); isNew = 0; } assert(duser); diff --git a/monetdb5/modules/mal/wlc.c b/monetdb5/modules/mal/wlc.c --- a/monetdb5/modules/mal/wlc.c +++ b/monetdb5/modules/mal/wlc.c @@ -604,6 +604,10 @@ WLCdatashipping(Client cntxt, MalBlkPtr str sch,tbl,col, msg = MAL_SUCCEED; (void) mb; b= BATdescriptor(bid); + if (b == NULL) { + msg = createException(MAL, "wlc.datashipping", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + goto finish; + } assert(b); // large BATs can also be re-created using the query. @@ -651,6 +655,8 @@ WLCdatashipping(Client cntxt, MalBlkPtr cntxt->wlc_kind = WLC_CATALOG; } finish: + if(b) + BBPunfix(b->batCacheid); if(sch) GDKfree(sch); if(tbl) @@ -776,6 +782,13 @@ WLCupdate(Client cntxt, MalBlkPtr mb, Ma BAT *b, *bval; b= BATdescriptor(stk->stk[getArg(pci,4)].val.bval); bval= BATdescriptor(stk->stk[getArg(pci,5)].val.bval); + if(b == NULL || bval == NULL) { + if(b) + BBPunfix(b->batCacheid); + if(bval) + BBPunfix(bval->batCacheid); + throw(MAL, "wlr.update", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + } if( b->ttype == TYPE_void) o = b->tseqbase; else diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c --- a/sql/backends/monet5/sql_rank.c +++ b/sql/backends/monet5/sql_rank.c @@ -45,11 +45,15 @@ SQLdiff(Client cntxt, MalBlkPtr mb, MalS c = b; bid = getArgReference_bat(stk, pci, 2); b = BATdescriptor(*bid); + if (!b) { + BBPunfix(c->batCacheid); + throw(SQL, "sql.rank", SQLSTATE(HY005) "Cannot access column descriptor"); + } - cmp = ATOMcompare(b->ttype); - it = bat_iterator(b); + cmp = ATOMcompare(b->ttype); + it = bat_iterator(b); v = BUNtail(it, 0); - bp = (bit*)Tloc(c, 0); + bp = (bit*)Tloc(c, 0); for(i=0; i<cnt; i++, bp++, rp++) { *rp = *bp; diff --git a/sql/backends/monet5/vaults/netcdf/netcdf.c b/sql/backends/monet5/vaults/netcdf/netcdf.c --- a/sql/backends/monet5/vaults/netcdf/netcdf.c +++ b/sql/backends/monet5/vaults/netcdf/netcdf.c @@ -294,6 +294,10 @@ header: %s", nc_strerror(retval)); /* Read dimensions from NetCDF header and insert a row for each one into netcdf_dims table */ dims = (char **)GDKzalloc(sizeof(char *) * ndims); + if (!dims) { + msg = createException(MAL, "netcdf.attach", SQLSTATE(HY001) MAL_MALLOC_FAIL); + goto finish; + } for (didx = 0; didx < ndims; didx++){ if ((retval = nc_inq_dim(ncid, didx, dname, &dlen)) != 0) return createException(MAL, "netcdf.attach", SQLSTATE(NC000) "Cannot read dimension %d : %s", didx, nc_strerror(retval)); @@ -311,6 +315,10 @@ header: %s", nc_strerror(retval)); goto finish; dims[didx] = GDKstrdup(dname); + if (!dims[didx]) { + msg = createException(MAL, "netcdf.attach", SQLSTATE(HY001) MAL_MALLOC_FAIL); + goto finish; + } } /* Read variables and attributes from the header and insert rows in netcdf_vars, netcdf_vardims, and netcdf_attrs tables */ @@ -373,6 +381,12 @@ header: %s", nc_strerror(retval)); switch ( atype ) { case NC_CHAR: aval = (char *) GDKzalloc(alen + 1); + if (!aval) { + GDKfree(esc_str0); + GDKfree(esc_str1); + msg = createException(MAL, "netcdf.attach", SQLSTATE(HY001) MAL_MALLOC_FAIL); + goto finish; + } if ((retval = nc_get_att_text(ncid,vidx,aname,aval))) return createException(MAL, "netcdf.attach", SQLSTATE(NC000) "Cannot read attribute %s value: %s", @@ -450,9 +464,14 @@ header: %s", nc_strerror(retval)); goto finish; } - switch ( atype ) { + switch ( atype ) { case NC_CHAR: aval = (char *) GDKzalloc(alen + 1); + if (!aval) { + GDKfree(esc_str0); + msg = createException(MAL, "netcdf.attach", SQLSTATE(HY001) MAL_MALLOC_FAIL); + goto finish; + } if ((retval = nc_get_att_text(ncid,NC_GLOBAL,aname,aval))) { GDKfree(esc_str0); if (dims != NULL ){ @@ -586,6 +605,8 @@ NCDFimportVarStmt(str *sciqlstmt, str *f nc_close(ncid); *sciqlstmt = GDKstrdup(buf); + if(*sciqlstmt == NULL) + return createException(MAL, "netcdf.importvar", SQLSTATE(HY001) MAL_MALLOC_FAIL); return msg; } @@ -607,6 +628,8 @@ NCDFloadVar(bat **dim, bat *v, int ncid, dim_bids = *dim; dlen = (size_t *)GDKzalloc(sizeof(size_t) * vndims); + if (!dlen) + return createException(MAL, "netcdf.attach", SQLSTATE(HY001) MAL_MALLOC_FAIL); for (i = 0; i < vndims; i++){ if ((retval = nc_inq_dimlen(ncid, vdims[i], &dlen[i]))) @@ -759,8 +782,15 @@ NCDFimportVariable(Client cntxt, MalBlkP dname = (char **) GDKzalloc( sizeof(char *) * vndims); if (dname == NULL) throw(MAL, "netcdf.importvar", SQLSTATE(HY001) MAL_MALLOC_FAIL); - for (i = 0; i < vndims; i++) + for (i = 0; i < vndims; i++) { dname[i] = (char *) GDKzalloc(NC_MAX_NAME + 1); + if(!dname[i]) { + for (j = 0; j < i; j++) + GDKfree(dname[j]); + GDKfree(dname); + throw(MAL, "netcdf.importvar", SQLSTATE(HY001) MAL_MALLOC_FAIL); + } + } snprintf(aname, 256, "%s%d", vname, fid); @@ -825,6 +855,11 @@ NCDFimportVariable(Client cntxt, MalBlkP } vbat = BATdescriptor(vbatid); + if(vbat == NULL) { + GDKfree(dname); + GDKfree(dim_bids); + return createException(MAL, "netcdf.importvar", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + } store_funcs.append_col(m->session->tr, col, vbat, TYPE_bat); BBPunfix(vbatid); BBPrelease(vbatid); @@ -840,6 +875,11 @@ NCDFimportVariable(Client cntxt, MalBlkP } dimbat = BATdescriptor(dim_bids[i]); + if(dimbat == NULL) { + GDKfree(dname); + GDKfree(dim_bids); + return createException(MAL, "netcdf.importvar", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + } store_funcs.append_col(m->session->tr, col, dimbat, TYPE_bat); BBPunfix(dim_bids[i]); /* phys. ref from BATdescriptor */ BBPrelease(dim_bids[i]); /* log. ref. from loadVar */ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list