Changeset: 237391267472 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=237391267472 Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out clients/mapiclient/dotmonetdb.c clients/mapiclient/mclient.c clients/odbc/samples/arraytest.c clients/odbc/samples/odbcsample1.c clients/odbc/samples/testgetinfo.c common/stream/stream.c gdk/gdk_atoms.c gdk/gdk_bat.c gdk/gdk_bbp.c gdk/gdk_heap.c gdk/gdk_logger.c gdk/gdk_search.c gdk/gdk_storage.c geom/monetdb5/geom.c geom/monetdb5/geom_upgrade.c monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.Windows monetdb5/extras/rapi/rapi.c monetdb5/mal/mal_atom.c monetdb5/mal/mal_builder.c monetdb5/mal/mal_client.c monetdb5/mal/mal_dataflow.c monetdb5/mal/mal_exception.c monetdb5/mal/mal_function.c monetdb5/mal/mal_import.c monetdb5/mal/mal_instruction.c monetdb5/mal/mal_linker.c monetdb5/mal/mal_listing.c monetdb5/mal/mal_parser.c monetdb5/mal/mal_profiler.c monetdb5/mal/mal_resolve.c monetdb5/mal/mal_runtime.c monetdb5/mal/mal_session.c monetdb5/mal/mal_type.c monetdb5/modules/atoms/batxml.c monetdb5/modules/atoms/blob.c monetdb5/modules/atoms/blob.h monetdb5/modules/atoms/color.c monetdb5/modules/atoms/identifier.c monetdb5/modules/atoms/inet.c monetdb5/modules/atoms/json.c monetdb5/modules/atoms/mtime.c monetdb5/modules/atoms/str.c monetdb5/modules/atoms/streams.c monetdb5/modules/atoms/url.c monetdb5/modules/atoms/uuid.c monetdb5/modules/atoms/xml.c monetdb5/modules/kernel/algebra.c monetdb5/modules/kernel/bat5.c monetdb5/modules/mal/clients.c monetdb5/modules/mal/mal_io.c monetdb5/modules/mal/mal_mapi.c monetdb5/modules/mal/manifold.c monetdb5/modules/mal/pcre.c monetdb5/modules/mal/remote.c monetdb5/modules/mal/sysmon.c monetdb5/modules/mal/tablet.c monetdb5/modules/mal/tablet.h monetdb5/modules/mal/txtsim.c monetdb5/modules/mal/wlc.c monetdb5/optimizer/opt_emptybind.c monetdb5/optimizer/opt_evaluate.c monetdb5/optimizer/opt_macro.c monetdb5/optimizer/opt_mergetable.c monetdb5/optimizer/opt_multiplex.c monetdb5/optimizer/opt_reorder.c monetdb5/optimizer/opt_support.c monetdb5/scheduler/run_adder.c sql/backends/monet5/UDF/pyapi/convert_loops.h sql/backends/monet5/UDF/pyapi/unicode.c sql/backends/monet5/generator/generator.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql.mal sql/backends/monet5/sql_cast.c sql/backends/monet5/sql_execute.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_optimizer.c sql/backends/monet5/sql_scenario.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_statistics.c sql/backends/monet5/sql_upgrades.c sql/backends/monet5/sql_user.c sql/backends/monet5/vaults/bam/bam_export.c sql/backends/monet5/vaults/bam/bam_globals.h sql/backends/monet5/vaults/bam/bam_wrapper.c sql/backends/monet5/vaults/shp/shp.c sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out sql/benchmarks/tpch/Tests/01-22.stable.out sql/common/sql_mem.c sql/common/sql_types.c sql/server/rel_exp.c sql/server/rel_optimizer.c sql/server/rel_planner.c sql/server/rel_psm.c sql/server/rel_rel.c sql/server/rel_select.c sql/server/rel_updates.c sql/storage/store.c sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.err sql/test/BugTracker-2015/Tests/sys_tracelog.Bug-3887.stable.out sql/test/BugTracker-2017/Tests/All sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out sql/test/BugTracker-2017/Tests/wrong_aggregation_count.Bug-6257.stable.out sql/test/Dump/Tests/dump.stable.out sql/test/Tests/setoptimizer.stable.out sql/test/Tests/systemfunctions.stable.out sql/test/Tests/systemfunctions.stable.out.int128 sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128 sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/check.stable.out sql/test/emptydb-upgrade-chain/Tests/check.stable.out.32bit sql/test/emptydb-upgrade-chain/Tests/check.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-hge/Tests/check.stable.out.int128 sql/test/emptydb-upgrade/Tests/check.stable.out sql/test/emptydb-upgrade/Tests/check.stable.out.32bit sql/test/emptydb-upgrade/Tests/check.stable.out.int128 sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 sql/test/leaks/Tests/check1.stable.out sql/test/leaks/Tests/check1.stable.out.int128 sql/test/leaks/Tests/check2.stable.out sql/test/leaks/Tests/check2.stable.out.int128 sql/test/leaks/Tests/check3.stable.out sql/test/leaks/Tests/check3.stable.out.int128 sql/test/leaks/Tests/check4.stable.out sql/test/leaks/Tests/check4.stable.out.int128 sql/test/leaks/Tests/check5.stable.out sql/test/leaks/Tests/check5.stable.out.int128 sql/test/mapi/Tests/sql_int128.stable.out.int128 sql/test/pg_regress/Tests/float8.stable.out sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain/Tests/dump.stable.out.Windows sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade/Tests/dump.stable.out.Windows sql/test/testdb/Tests/testdb-dump.stable.out.Windows sql/test/wlcr/Tests/wlr70.stable.err sql/test/wlcr/Tests/wlr70.stable.out tools/merovingian/client/monetdb.c tools/merovingian/daemon/controlrunner.c tools/merovingian/utils/glob.c tools/mserver/mserver5.c Branch: mosaic Log Message:
Merge with default diffs (truncated from 5488 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -1834,8 +1834,8 @@ str SERVERstop(void *ret); str SERVERsuspend(void *ret); str SERVERtrace(void *ret, int *mid, int *flag); int SQLBLOBfromstr(char *instr, int *l, blob **val); -int SQLBLOBtostr(str *tostr, int *l, blob *pin); -BUN SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, char *csep, char *rsep, char quote, lng skip, lng maxrow, int best); +int SQLBLOBtostr(str *tostr, int *l, const blob *pin); +BUN SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, const char *csep, const char *rsep, char quote, lng skip, lng maxrow, int best); str STRBytes(int *res, const str *arg1); str STRConcat(str *res, const str *val1, const str *val2); str STRFromWChr(str *res, const int *at); @@ -1932,8 +1932,6 @@ str SYSmem_usage(bat *ret, bat *ret2, co str SYSsetmem_maxsize(void *ret, const lng *num); str SYSsetvm_maxsize(void *ret, const lng *num); str SYSvm_usage(bat *ret, bat *ret2, const lng *minsize); -void *TABLETadt_frStr(Column *c, int type, char *s, char *e, char quote); -int TABLETadt_toStr(void *extra, char **buf, int *len, int type, ptr a); str TABLETcollect(BAT **bats, Tablet *as); str TABLETcollect_parts(BAT **bats, Tablet *as, BUN offset); str TABLETcreate_bats(Tablet *as, BUN est); @@ -2487,6 +2485,7 @@ int newTmpVariable(MalBlkPtr mb, malType int newTypeVariable(MalBlkPtr mb, malType type); int newVariable(MalBlkPtr mb, const char *name, size_t len, malType type); str nextRef; +float nextafterf(float x, float y); str notRef; str not_ilikeRef; str not_likeRef; @@ -2649,8 +2648,6 @@ str sortRef; str sortReverseRef; str soundex_impl(str *res, str *Name); str sqlRef; -int sqlblob_fromstr(char *instr, int *l, blob **val); -int sqlblob_tostr(str *tostr, int *l, const blob *p); str sqlcatalogRef; str startProfiler(void); str startRef; diff --git a/clients/mapiclient/dotmonetdb.c b/clients/mapiclient/dotmonetdb.c --- a/clients/mapiclient/dotmonetdb.c +++ b/clients/mapiclient/dotmonetdb.c @@ -97,8 +97,7 @@ parse_dotmonetdb(char **user, char **pas } else if (strcmp(buf, "language") == 0) { /* make sure we don't set garbage */ if (strcmp(q, "sql") != 0 && - strcmp(q, "mal") != 0 && - strcmp(q, "jaql") != 0) { + strcmp(q, "mal") != 0) { fprintf(stderr, "%s:%d: unsupported " "language: %s\n", cfile, line, q); diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -1158,7 +1158,10 @@ TESTrenderer(MapiHdl hdl) strcmp(tp, "dbl") == 0) { char buf[32]; int j; - double v = strtod(s, NULL); + double v; + if (strcmp(s, "-0") == 0) /* normalize -0 */ + s = "0"; + v = strtod(s, NULL); for (j = 4; j < 11; j++) { snprintf(buf, sizeof(buf), "%.*g", j, v); if (v == strtod(buf, NULL)) @@ -1168,10 +1171,13 @@ TESTrenderer(MapiHdl hdl) } else if (strcmp(tp, "real") == 0) { char buf[32]; int j; + float v; + if (strcmp(s, "-0") == 0) /* normalize -0 */ + s = "0"; #ifdef HAVE_STRTOF - float v = strtof(s, NULL); + v = strtof(s, NULL); #else - float v = (float) strtod(s, NULL); + v = (float) strtod(s, NULL); #endif for (j = 4; j < 6; j++) { snprintf(buf, sizeof(buf), "%.*g", j, v); diff --git a/clients/odbc/samples/arraytest.c b/clients/odbc/samples/arraytest.c --- a/clients/odbc/samples/arraytest.c +++ b/clients/odbc/samples/arraytest.c @@ -36,6 +36,7 @@ prerr(SQLSMALLINT tpe, SQLHANDLE hnd, co case SQL_SUCCESS_WITH_INFO: if (msglen >= (signed int) sizeof msg) fprintf(stderr, "(message truncated)\n"); + /* fall through */ case SQL_SUCCESS: fprintf(stderr, "%s: %s: SQLstate %s, Errnr %d, Message %s\n", diff --git a/clients/odbc/samples/odbcsample1.c b/clients/odbc/samples/odbcsample1.c --- a/clients/odbc/samples/odbcsample1.c +++ b/clients/odbc/samples/odbcsample1.c @@ -34,6 +34,7 @@ prerr(SQLSMALLINT tpe, SQLHANDLE hnd, co case SQL_SUCCESS_WITH_INFO: if (msglen >= (signed int) sizeof(msg)) fprintf(stderr, "(message truncated)\n"); + /* fall through */ case SQL_SUCCESS: fprintf(stderr, "%s: %s: SQLstate %s, Errnr %d, Message %s\n", func, pref, (char*)state, (int)errnr, (char*)msg); break; diff --git a/clients/odbc/samples/testgetinfo.c b/clients/odbc/samples/testgetinfo.c --- a/clients/odbc/samples/testgetinfo.c +++ b/clients/odbc/samples/testgetinfo.c @@ -31,6 +31,7 @@ prerr(SQLSMALLINT tpe, SQLHANDLE hnd, co case SQL_SUCCESS_WITH_INFO: if (msglen >= (signed int) sizeof(msg)) fprintf(stderr, "(message truncated)\n"); + /* fall through */ case SQL_SUCCESS: fprintf(stderr, "%s: %s: SQLstate %s, Errnr %d, Message %s\n", func, pref, (char*)state, (int)errnr, (char*)msg); break; diff --git a/common/stream/stream.c b/common/stream/stream.c --- a/common/stream/stream.c +++ b/common/stream/stream.c @@ -2971,7 +2971,11 @@ file_rastream(FILE *fp, const char *name s->isutf8 = 1; return s; } - file_fsetpos(s, pos); + if (file_fsetpos(s, pos) < 0) { + /* unlikely: we couldn't seek the file back */ + destroy(s); + return NULL; + } } #ifdef _MSC_VER if (_fileno(fp) == 0 && _isatty(0)) { diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c --- a/gdk/gdk_atoms.c +++ b/gdk/gdk_atoms.c @@ -165,20 +165,25 @@ ATOMallocate(const char *id) { int t; + if (strlen(id) >= IDLENGTH) { + GDKerror("ATOMallocate: name too long"); + return int_nil; + } + MT_lock_set(&GDKthreadLock); t = ATOMindex(id); - if (t < 0) { t = -t; if (t == GDKatomcnt) { + if (GDKatomcnt == MAXATOMS) { + MT_lock_unset(&GDKthreadLock); + GDKerror("ATOMallocate: too many types"); + return int_nil; + } GDKatomcnt++; } - if (GDKatomcnt == MAXATOMS) - GDKfatal("ATOMallocate: too many types"); - if (strlen(id) >= IDLENGTH) - GDKfatal("ATOMallocate: name too long"); memset(BATatoms + t, 0, sizeof(atomDesc)); - snprintf(BATatoms[t].name, sizeof(BATatoms[t].name), "%s", id); + strcpy(BATatoms[t].name, id); BATatoms[t].size = sizeof(int); /* default */ BATatoms[t].align = sizeof(int); /* default */ BATatoms[t].linear = 1; /* default */ diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -289,7 +289,14 @@ BATattach(int tt, const char *heapfile, while ((c = getc(f)) != EOF) { if (n == m) { m += 4096; - p = GDKrealloc(p, m); + s = GDKrealloc(p, m); + if (s == NULL) { + GDKfree(p); + BBPreclaim(bn); + fclose(f); + return NULL; + } + p = s; s = p + n; } if (c == '\n' && n > 0 && s[-1] == '\r') { diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -284,7 +284,7 @@ BBPunlock(void) } -static void +static gdk_return BBPinithash(int j) { bat i = (bat) ATOMIC_GET(BBPsize, BBPsizeLock); @@ -293,8 +293,10 @@ BBPinithash(int j) for (BBP_mask = 1; (BBP_mask << 1) <= BBPlimit; BBP_mask <<= 1) ; BBP_hash = (bat *) GDKzalloc(BBP_mask * sizeof(bat)); - if (BBP_hash == NULL) - GDKfatal("BBPinithash: cannot allocate memory\n"); + if (BBP_hash == NULL) { + GDKerror("BBPinithash: cannot allocate memory\n"); + return GDK_FAIL; + } BBP_mask--; while (--i > 0) { @@ -311,6 +313,7 @@ BBPinithash(int j) j = 0; } } + return GDK_SUCCEED; } int @@ -360,7 +363,8 @@ BBPextend(int idx, int buildhash) BBP_hash = NULL; for (i = 0; i <= BBP_THREADMASK; i++) BBP_free(i) = 0; - BBPinithash(idx); + if (BBPinithash(idx) != GDK_SUCCEED) + return GDK_FAIL; } return GDK_SUCCEED; } @@ -1402,7 +1406,8 @@ BBPinit(void) BBPreadEntries(fp, bbpversion); fclose(fp); - BBPinithash(0); + if (BBPinithash(0) != GDK_SUCCEED) + GDKfatal("BBPinit: BBPinithash failed"); /* will call BBPrecover if needed */ if (BBPprepare(FALSE) != GDK_SUCCEED) diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c --- a/gdk/gdk_heap.c +++ b/gdk/gdk_heap.c @@ -216,13 +216,13 @@ HEAPextend(Heap *h, size_t size, int may /* try GDKrealloc if the heap size stays within * reasonable limits */ if (!must_mmap) { - void *p = h->base; h->newstorage = h->storage = STORE_MEM; h->base = GDKrealloc(h->base, size); - HEAPDEBUG fprintf(stderr, "#HEAPextend: extending malloced heap " SZFMT " " SZFMT " " PTRFMT " " PTRFMT "\n", size, h->size, PTRFMTCAST p, PTRFMTCAST h->base); + HEAPDEBUG fprintf(stderr, "#HEAPextend: extending malloced heap " SZFMT " " SZFMT " " PTRFMT " " PTRFMT "\n", size, h->size, PTRFMTCAST bak.base, PTRFMTCAST h->base); h->size = size; if (h->base) return GDK_SUCCEED; /* success */ + /* bak.base is still valid and may get restored */ failure = "h->storage == STORE_MEM && !must_map && !h->base"; } /* too big: convert it to a disk-based temporary heap */ @@ -631,7 +631,7 @@ HEAPload_intern(Heap *h, const char *nme { size_t minsize; int ret = 0; - char *srcpath, *dstpath; + char *srcpath, *dstpath, *tmp; int t0; h->storage = h->newstorage = h->size < 4 * GDK_mmap_pagesize ? STORE_MEM : STORE_MMAP; @@ -678,7 +678,14 @@ HEAPload_intern(Heap *h, const char *nme * takes precedence. */ srcpath = GDKfilepath(h->farmid, BATDIR, nme, ext); dstpath = GDKfilepath(h->farmid, BATDIR, nme, ext); - srcpath = GDKrealloc(srcpath, strlen(srcpath) + strlen(suffix) + 1); + if (srcpath == NULL || + dstpath == NULL || + (tmp = GDKrealloc(srcpath, strlen(srcpath) + strlen(suffix) + 1)) == NULL) { + GDKfree(srcpath); + GDKfree(dstpath); + return GDK_FAIL; + } + srcpath = tmp; strcat(srcpath, suffix); t0 = GDKms(); diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c --- a/gdk/gdk_storage.c +++ b/gdk/gdk_storage.c @@ -798,6 +798,7 @@ BATload_intern(bat bid, int lock) /* LOAD bun heap */ if (b->ttype != TYPE_void) { if (HEAPload(&b->theap, nme, "tail", b->batRestricted == BAT_READ) != GDK_SUCCEED) { + HEAPfree(&b->theap, 0); return NULL; } assert(b->theap.size >> b->tshift <= BUN_MAX); @@ -810,6 +811,7 @@ BATload_intern(bat bid, int lock) if (ATOMvarsized(b->ttype)) { if (HEAPload(b->tvheap, nme, "theap", b->batRestricted == BAT_READ) != GDK_SUCCEED) { HEAPfree(&b->theap, 0); + HEAPfree(b->tvheap, 0); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list