Changeset: 392761a5bd5a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=392761a5bd5a Modified Files: MonetDB/src/gdk/gdk_atoms.mx MonetDB/src/gdk/gdk_logger.mx MonetDB4/src/modules/contrib/array.mx MonetDB4/src/modules/plain/monettime.mx MonetDB4/src/modules/plain/url.mx MonetDB4/src/monet/monet_multiplex.mx MonetDB5/src/modules/atoms/mtime.mx MonetDB5/src/modules/atoms/url.mx MonetDB5/src/modules/kernel/array.mx Branch: Oct2010 Log Message:
Fixes inspired by valgrind. Mostly fixing jumps based on and writes of uninitialized data. The latter is not really a bug, so the fix for that is only enabled in debug builds (when assertions are enabled). diffs (234 lines): diff -r c4adc30959fc -r 392761a5bd5a MonetDB/src/gdk/gdk_atoms.mx --- a/MonetDB/src/gdk/gdk_atoms.mx Fri Oct 08 11:43:23 2010 +0200 +++ b/MonetDB/src/gdk/gdk_atoms.mx Fri Oct 08 16:29:33 2010 +0200 @@ -1875,6 +1875,10 @@ d->free = GDK_STRHASHTABLE * sizeof(stridx_t); memset(d->base, 0, d->free); d->hashash = 1; /* new string heaps get the hash value (and length) stored */ +#ifndef NDEBUG + /* fill should solve initialisation problems within valgrind */ + memset(d->base + d->free, 0, size - d->free); +#endif } } @@ -2017,8 +2021,10 @@ if (HEAPextend(h, newsize) < 0) { return 0; } +#ifndef NDEBUG /* fill should solve initialisation problems within valgrind */ memset(h->base + h->free, 0, h->size - h->free); +#endif /* make bucket point into the enw heap */ bucket = ((stridx_t *) h->base) + off; diff -r c4adc30959fc -r 392761a5bd5a MonetDB/src/gdk/gdk_logger.mx --- a/MonetDB/src/gdk/gdk_logger.mx Fri Oct 08 11:43:23 2010 +0200 +++ b/MonetDB/src/gdk/gdk_logger.mx Fri Oct 08 16:29:33 2010 +0200 @@ -1104,6 +1104,8 @@ lg->log = NULL; lg->end = 0; lg->catalog = NULL; + lg->snapshots = NULL; + lg->seqs = NULL; snprintf(filename, BUFSIZ, "%s%s", lg->dir, LOGFILE); snprintf(bak, BUFSIZ, "%s.bak", filename); diff -r c4adc30959fc -r 392761a5bd5a MonetDB4/src/modules/contrib/array.mx --- a/MonetDB4/src/modules/contrib/array.mx Fri Oct 08 11:43:23 2010 +0200 +++ b/MonetDB4/src/modules/contrib/array.mx Fri Oct 08 16:29:33 2010 +0200 @@ -197,7 +197,7 @@ #endif minvector = GDKmalloc(sizeof(ptr) * dims); - idxvector = GDKmalloc(sizeof(int) * dims); + idxvector = GDKzalloc(sizeof(int) * dims); maxvector = GDKmalloc(sizeof(ptr) * dims); lenvector = GDKmalloc(sizeof(ptr) * dims); @@ -246,7 +246,7 @@ register BUN p = BUNfnd(batptr[i], o); if (p == BUN_NONE) { - GDKerror("print_array: Index %d missing for oid %d.\n", i, *o); + GDKerror("print_array: Index %d missing for oid " OIDFMT ".\n", i, *o); goto exit_err_full; } offset = (offset * lenvector[i]) + ((*((int *) Tloc(batptr[i],p))) - minvector[i]); @@ -263,8 +263,6 @@ #ifdef EXCESSIVE_DEBUGGING fprintf(stderr, "[PRINT_ARRAY] "); #endif - for (i = 0; i < dims; i++) - idxvector[i] = 0; while (idxvector[dims - 1] < lenvector[dims - 1]) { int offset; @@ -278,7 +276,7 @@ } } i = 0; - while (idxvector[i] == 0 && i < dims) { + while (i < dims && idxvector[i] == 0) { #ifdef EXCESSIVE_DEBUGGING fprintf(stderr, "["); #endif @@ -292,18 +290,18 @@ register BUN p = BUNfnd(val, &arrayindex[offset]); if (p == BUN_NONE) { - GDKerror("print_array: Value missing for oid %d.\n", arrayindex[offset]); + GDKerror("print_array: Value missing for oid " OIDFMT ".\n", arrayindex[offset]); goto exit_err_full; } #ifdef EXCESSIVE_DEBUGGING - fprintf(stderr, "%...@0", arrayindex[offset]); + fprintf(stderr, OIDFMT "\...@0", arrayindex[offset]); #endif ATOMprint(type_id, BUNtail(vali, p), st); if (mnstr_errnr(st)) goto exit_err_full; } i = 0; - while ((++idxvector[i]) == lenvector[i] && i < dims) { + while (i < dims && (++idxvector[i]) == lenvector[i]) { #ifdef EXCESSIVE_DEBUGGING fprintf(stderr, "]"); #endif diff -r c4adc30959fc -r 392761a5bd5a MonetDB4/src/modules/plain/monettime.mx --- a/MonetDB4/src/modules/plain/monettime.mx Fri Oct 08 11:43:23 2010 +0200 +++ b/MonetDB4/src/modules/plain/monettime.mx Fri Oct 08 16:29:33 2010 +0200 @@ -798,9 +798,10 @@ @c #define get_rule(r) ((r).s.weekday | ((r).s.day<<6) | ((r).s.minutes<<10) | ((r).s.month<<21)) -#define set_rule(r,i) { (r).s.weekday = (i)&15;\ - (r).s.day = ((i)&(63<<6))>>6;\ - (r).s.minutes = ((i)&(2047<<10))>>10;\ +#define set_rule(r,i) { (r).asint = int_nil; \ + (r).s.weekday = (i)&15; \ + (r).s.day = ((i)&(63<<6))>>6; \ + (r).s.minutes = ((i)&(2047<<10))>>10; \ (r).s.month = ((i)&(15<<21))>>21; } /* phony zero values, used to get negative numbers from unsigned sub-integers in rule */ diff -r c4adc30959fc -r 392761a5bd5a MonetDB4/src/modules/plain/url.mx --- a/MonetDB4/src/modules/plain/url.mx Fri Oct 08 11:43:23 2010 +0200 +++ b/MonetDB4/src/modules/plain/url.mx Fri Oct 08 16:29:33 2010 +0200 @@ -608,6 +608,8 @@ s = (str)str_nil; while (*t && *t != ':') t++; + if (*t == 0) + goto getUser_done; t++; if (*t != '/') goto getUser_done; @@ -617,6 +619,8 @@ t++; for (; *t && *t != '/'; t++) ; + if (*t == 0) + goto getUser_done; t++; if (*t == '~') { t++; diff -r c4adc30959fc -r 392761a5bd5a MonetDB4/src/monet/monet_multiplex.mx --- a/MonetDB4/src/monet/monet_multiplex.mx Fri Oct 08 11:43:23 2010 +0200 +++ b/MonetDB4/src/monet/monet_multiplex.mx Fri Oct 08 16:29:33 2010 +0200 @@ -837,7 +837,7 @@ oid hseq = oid_nil; BAT *b1, *b2, *b3=0, *retb, *bh=0; int ret_sze = ATOMsize(ret_tpe); - ptr tptr = (ptr) GDKmalloc(ret_sze+8); + ptr tptr = (ptr) GDKzalloc(ret_sze+8); ptr tnil = ATOMnilptr(ret_tpe); int replace = FALSE, buntrick = 0; bulkerror_t bulkerror; @@ -1132,7 +1132,7 @@ BUN p1, p2, p3 = BUN_NONE; /* bun pointers */ BUN e1, e2, e3 = BUN_NONE; /* bun pointers */ int ret_sze = ATOMsize(ret_tpe), ok = 0; - ptr tptr = GDKmalloc(MAX(1,ret_sze)); + ptr tptr = GDKzalloc(MAX(1,ret_sze)); ptr tnil = ATOMnilptr(ret_tpe); int replace=0, htpe = TYPE_void; bulkerror_t bulkerror; diff -r c4adc30959fc -r 392761a5bd5a MonetDB5/src/modules/atoms/mtime.mx --- a/MonetDB5/src/modules/atoms/mtime.mx Fri Oct 08 11:43:23 2010 +0200 +++ b/MonetDB5/src/modules/atoms/mtime.mx Fri Oct 08 16:29:33 2010 +0200 @@ -906,9 +906,10 @@ } rule; @c #define get_rule(r) ((r).s.weekday | ((r).s.day<<6) | ((r).s.minutes<<10) | ((r).s.month<<21)) -#define set_rule(r,i) { (r).s.weekday = (i)&15;\ - (r).s.day = ((i)&(63<<6))>>6;\ - (r).s.minutes = ((i)&(2047<<10))>>10;\ +#define set_rule(r,i) { (r).asint = int_nil; \ + (r).s.weekday = (i)&15; \ + (r).s.day = ((i)&(63<<6))>>6; \ + (r).s.minutes = ((i)&(2047<<10))>>10; \ (r).s.month = ((i)&(15<<21))>>21; } /* phony zero values, used to get negative numbers from unsigned sub-integers in rule */ diff -r c4adc30959fc -r 392761a5bd5a MonetDB5/src/modules/atoms/url.mx --- a/MonetDB5/src/modules/atoms/url.mx Fri Oct 08 11:43:23 2010 +0200 +++ b/MonetDB5/src/modules/atoms/url.mx Fri Oct 08 16:29:33 2010 +0200 @@ -673,6 +673,8 @@ s = (str)str_nil; while (*t && *t != ':') t++; + if (*t == 0) + goto getUser_done; t++; if (*t != '/') goto getUser_done; @@ -682,6 +684,8 @@ t++; for (; *t && *t != '/'; t++) ; + if (*t == 0) + goto getUser_done; t++; if (*t == '~') { t++; diff -r c4adc30959fc -r 392761a5bd5a MonetDB5/src/modules/kernel/array.mx --- a/MonetDB5/src/modules/kernel/array.mx Fri Oct 08 11:43:23 2010 +0200 +++ b/MonetDB5/src/modules/kernel/array.mx Fri Oct 08 16:29:33 2010 +0200 @@ -429,7 +429,7 @@ minvector = GDKmalloc(sizeof(ptr) * dims); if ( minvector == NULL) goto exit_err_full; - idxvector = GDKmalloc(sizeof(int) * dims); + idxvector = GDKzalloc(sizeof(int) * dims); if ( idxvector == NULL) goto exit_err_full; maxvector = GDKmalloc(sizeof(ptr) * dims); @@ -503,8 +503,6 @@ #ifdef EXCESSIVE_DEBUGGING fprintf(stderr, "[PRINT_ARRAY] "); #endif - for (i = 0; i < dims; i++) - idxvector[i] = 0; while (idxvector[dims - 1] < lenvector[dims - 1]) { int offset; @@ -518,7 +516,7 @@ } } i = 0; - while (idxvector[i] == 0 && i < dims) { + while (i < dims && idxvector[i] == 0) { #ifdef EXCESSIVE_DEBUGGING fprintf(stderr, "["); #endif @@ -543,7 +541,7 @@ goto exit_err_full; } i = 0; - while ((++idxvector[i]) == lenvector[i] && i < dims) { + while (i < dims && (++idxvector[i]) == lenvector[i]) { #ifdef EXCESSIVE_DEBUGGING fprintf(stderr, "]"); #endif _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list