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

Reply via email to