Changeset: fed0db3f972a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fed0db3f972a Modified Files: clients/mapiclient/dotmonetdb.c clients/mapiclient/mclient.c common/utils/msabaoth.c gdk/gdk_aggr.c gdk/gdk_bbp.c gdk/gdk_logger.c gdk/gdk_string.c gdk/gdk_time.c gdk/gdk_tracer.c gdk/gdk_utils.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_upgrades.c sql/server/rel_prop.c sql/server/rel_select.c sql/server/rel_unnest.c sql/server/rel_unnest.h sql/test/subquery/Tests/subquery4.sql sql/test/subquery/Tests/subquery4.stable.err sql/test/subquery/Tests/subquery4.stable.out sql/test/subquery/Tests/subquery5.sql sql/test/subquery/Tests/subquery5.stable.err sql/test/subquery/Tests/subquery5.stable.out tools/merovingian/daemon/controlrunner.c tools/merovingian/daemon/forkmserver.c tools/merovingian/daemon/merovingian.c Branch: unlock Log Message:
merged with default diffs (truncated from 1287 to 300 lines): diff --git a/clients/mapiclient/dotmonetdb.c b/clients/mapiclient/dotmonetdb.c --- a/clients/mapiclient/dotmonetdb.c +++ b/clients/mapiclient/dotmonetdb.c @@ -17,6 +17,8 @@ parse_dotmonetdb(DotMonetdb *dotfile) FILE *config = NULL; char buf[FILENAME_MAX]; + if (dotfile == NULL) + return; if ((cfile = getenv("DOTMONETDBFILE")) == NULL) { /* no environment variable: use a default */ if ((config = fopen(".monetdb", "r")) == NULL) { @@ -46,9 +48,7 @@ parse_dotmonetdb(DotMonetdb *dotfile) cfile = strdup(cfile); } - if (dotfile) { - *dotfile = (DotMonetdb) {0}; - } + *dotfile = (DotMonetdb) {0}; if (config) { int line = 0; diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -3252,7 +3252,6 @@ main(int argc, char **argv) } /* parse config file first, command line options override */ - // parse_dotmonetdb(&user, &passwd, &dbname, &language, &save_history, &output, &pagewidth); parse_dotmonetdb(&dotfile); user = dotfile.user; passwd = dotfile.passwd; diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c --- a/common/utils/msabaoth.c +++ b/common/utils/msabaoth.c @@ -750,6 +750,11 @@ msab_getStatus(sabdb** ret, char *dbname sabdb *sdb; sdb = *ret = NULL; + if (dbname && strpbrk(dbname, "/\\") != NULL) { + snprintf(data, sizeof(data), + "database name contains disallowed characters"); + return strdup(data); + } /* scan the parent for directories */ if ((p = getFarmPath(pathbuf, sizeof(pathbuf), NULL)) != NULL) return(p); diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c --- a/gdk/gdk_aggr.c +++ b/gdk/gdk_aggr.c @@ -3759,7 +3759,7 @@ BATgroupcorrelation(BAT *b1, BAT *b2, BA (BATcount(e) == BATcount(b1) && (e->hseqbase == b1->hseqbase || e->hseqbase == b2->hseqbase))) && (BATtdense(g) || (g->tkey && g->tnonil))) { dbl v = dbl_nil; - return BATconstant(ngrp == 0 ? 0 : min, TYPE_dbl, &v, ngrp, TRANSIENT); + return BATconstant(min, TYPE_dbl, &v, ngrp, TRANSIENT); } delta1 = GDKmalloc(ngrp * sizeof(dbl)); diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -499,8 +499,9 @@ fixdateheap(BAT *b, const char *anme) TRC_CRITICAL(GDK, "GDKfilepath failed\n"); return GDK_FAIL; } - /* coverity[null_returns] */ - *strrchr(srcdir, DIR_SEP) = 0; + char *s; + if ((s = strrchr(srcdir, DIR_SEP)) != NULL) + *s = 0; if ((bnme = strrchr(nme, DIR_SEP)) != NULL) bnme++; @@ -951,6 +952,7 @@ BBPreadEntries(FILE *fp, unsigned bbpver if ((s = strchr(headname, '~')) != NULL && s == headname) { int len = snprintf(logical, sizeof(logical), "tmp_%o", (unsigned) bid); if (len == -1 || len >= (int) sizeof(logical)) { + BATdestroy(bn); TRC_CRITICAL(GDK, "BBP logical filename directory is too large\n"); return GDK_FAIL; } diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -284,7 +284,6 @@ log_read_clear(logger *lg, trans *tr, ch { if (lg->debug & 1) fprintf(stderr, "#logger found log_read_clear %s\n", NAME(name, tpe, id)); - if (tr_grow(tr) != GDK_SUCCEED) return LOG_ERR; tr->changes[tr->nr].type = LOG_CLEAR; @@ -337,13 +336,12 @@ la_bat_clear(logger *lg, logaction *la) } static log_return -log_read_seq(logger *lg, trans *tr, logformat *l) +log_read_seq(logger *lg, logformat *l) { int seq = (int) l->nr; lng val; BUN p; - (void)tr; assert(!lg->inmemory); assert(l->nr <= (lng) INT_MAX); if (mnstr_readLng(lg->input_log, &val) != 1) { @@ -478,13 +476,13 @@ log_read_updates(logger *lg, trans *tr, } else { assert(ht == TYPE_void); } - r = COLnew(0, tt, (BUN) l->nr, PERSISTENT); if (r == NULL) { BBPreclaim(uid); logbat_destroy(b); return LOG_ERR; } + if (tseq) BATtseqbase(r, 0); @@ -797,6 +795,7 @@ la_bat_updates(logger *lg, logaction *la static log_return log_read_destroy(logger *lg, trans *tr, char *name, char tpe, oid id) { + (void) lg; assert(!lg->inmemory); if (tr_grow(tr) == GDK_SUCCEED) { tr->changes[tr->nr].type = LOG_DESTROY; @@ -910,6 +909,8 @@ la_bat_create(logger *lg, logaction *la) static log_return log_read_use(logger *lg, trans *tr, logformat *l, char *name, char tpe, oid id) { + (void) lg; + assert(!lg->inmemory); if (tr_grow(tr) != GDK_SUCCEED) return LOG_ERR; @@ -1270,7 +1271,7 @@ logger_read_transaction(logger *lg) tr = tr_commit(lg, tr); break; case LOG_SEQ: - err = log_read_seq(lg, tr, &l); + err = log_read_seq(lg, &l); break; case LOG_INSERT: case LOG_INSERT_OFFSET: diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c --- a/gdk/gdk_string.c +++ b/gdk/gdk_string.c @@ -788,9 +788,9 @@ strWrite(const char *a, stream *s, size_ static gdk_return concat_strings(BAT **bnp, ValPtr pt, BAT *b, oid seqb, - BUN ngrp, struct canditer *restrict ci, BUN ncand, - const oid *restrict gids, oid min, oid max, bool skip_nils, - BAT *sep, const char *restrict separator, BUN *has_nils) + BUN ngrp, struct canditer *restrict ci, BUN ncand, + const oid *restrict gids, oid min, oid max, bool skip_nils, + BAT *sep, const char *restrict separator, BUN *has_nils) { oid gid; BUN i, p, nils = 0; @@ -839,6 +839,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT } } } else { /* sep case */ + assert(sep != NULL); for (i = 0; i < ncand; i++) { p = canditer_next(ci) - seqb; s = BUNtvar(bi, p); @@ -887,6 +888,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT empty = false; } } else { /* sep case */ + assert(sep != NULL); for (i = 0; i < ncand; i++) { p = canditer_next(ci) - seqb; s = BUNtvar(bi, p); @@ -941,7 +943,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT * are empty), set to NULL */ for (i = 0; i < ngrp; i++) astrings[i] = (char *) str_nil; - + if (separator) { for (p = 0; p < ncand; p++) { i = canditer_next(ci) - seqb; @@ -961,6 +963,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT } } } else { /* sep case */ + assert(sep != NULL); for (p = 0; p < ncand; p++) { i = canditer_next(ci) - seqb; if (gids[i] >= min && gids[i] <= max) { @@ -1001,6 +1004,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT astrings[i] = NULL; } } else { /* sep case */ + assert(sep != NULL); for (i = 0; i < ngrp; i++) { if (astrings[i] == NULL) { if ((astrings[i] = GDKmalloc(lengths[i] + 1 - lastseplength[i])) == NULL) { @@ -1036,6 +1040,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT } } } else { /* sep case */ + assert(sep != NULL); for (p = 0; p < ncand; p++) { i = canditer_next(ci) - seqb; if (gids[i] >= min && gids[i] <= max) { @@ -1073,7 +1078,7 @@ concat_strings(BAT **bnp, ValPtr pt, BAT } } -finish: + finish: if (has_nils) *has_nils = nils; GDKfree(lengths); @@ -1092,8 +1097,8 @@ finish: } gdk_return -BATstr_group_concat(ValPtr res, BAT *b, BAT *s, BAT *sep, bool skip_nils, - bool abort_on_error, bool nil_if_empty, const char *restrict separator) +BATstr_group_concat(ValPtr res, BAT *b, BAT *s, BAT *sep, bool skip_nils, + bool abort_on_error, bool nil_if_empty, const char *restrict separator) { BUN ncand; struct canditer ci; @@ -1116,13 +1121,13 @@ BATstr_group_concat(ValPtr res, BAT *b, return GDK_SUCCEED; } - return concat_strings(NULL, res, b, b->hseqbase, 1, &ci, ncand, NULL, 0, 0, - skip_nils, sep, separator, NULL); + return concat_strings(NULL, res, b, b->hseqbase, 1, &ci, ncand, NULL, 0, 0, + skip_nils, sep, separator, NULL); } BAT * BATgroupstr_group_concat(BAT *b, BAT *g, BAT *e, BAT *s, BAT *sep, bool skip_nils, - bool abort_on_error, const char *restrict separator) + bool abort_on_error, const char *restrict separator) { BAT *bn = NULL; oid min, max; @@ -1163,8 +1168,8 @@ BATgroupstr_group_concat(BAT *b, BAT *g, } res = concat_strings(&bn, NULL, b, b->hseqbase, ngrp, &ci, ncand, - (const oid *) Tloc(g, 0), min, max, skip_nils, sep, - separator, &nils); + (const oid *) Tloc(g, 0), min, max, skip_nils, sep, + separator, &nils); if (res != GDK_SUCCEED) return NULL; @@ -1218,6 +1223,7 @@ GDKanalytical_str_group_concat(BAT *r, B empty = false; } } else { /* sep case */ + assert(sep != NULL); sl = BUNtvar(bis, (BUN) j); if (!strNil(sb)) { @@ -1257,6 +1263,7 @@ GDKanalytical_str_group_concat(BAT *r, B offset += next_length; empty = false; } else { /* sep case */ + assert(sep != NULL); sl = BUNtvar(bis, (BUN) j); if (strNil(sb)) @@ -1284,7 +1291,7 @@ GDKanalytical_str_group_concat(BAT *r, B r->tnonil = true; r->tnil = false; return GDK_SUCCEED; - allocation_error: + allocation_error: GDKfree(single_str); GDKerror("malloc failure\n"); return GDK_FAIL; diff --git a/gdk/gdk_time.c b/gdk/gdk_time.c --- a/gdk/gdk_time.c +++ b/gdk/gdk_time.c @@ -609,6 +609,24 @@ date_fromstr(const char *buf, size_t *le return parse_date(buf, *d, external); } +static ssize_t +do_date_tostr(char *buf, size_t len, const date *val, bool external) +{ + assert(len >= 15); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list