I couldn't dump an RRD (created by Cricket if that might matter) with a
CDEF.  I finally tracked it down to an uninitialized pointer in
rrd_dump.c.  There appears to be an identical bug in rrd_tune.c

Here's a patch:

diff -urN rrdtool-1.2.15-dist/src/rrd_dump.c rrdtool-1.2.15/src/rrd_dump.c
--- rrdtool-1.2.15-dist/src/rrd_dump.c  2006-07-14 07:11:26.000000000 -0500
+++ rrdtool-1.2.15/src/rrd_dump.c       2006-10-26 15:12:52.000000000 -0500
@@ -131,7 +131,7 @@
          fprintf(out_file, "\t\t<max> %0.10e 
</max>\n",rrd.ds_def[i].par[DS_max_val].u_val);
        }
     } else { /* DST_CDEF */
-         char *str;
+         char *str = 0;
          rpn_compact2str((rpn_cdefds_t *) 
&(rrd.ds_def[i].par[DS_cdef]),rrd.ds_def,&str);
          fprintf(out_file, "\t\t<cdef> %s </cdef>\n", str);
          free(str);
diff -urN rrdtool-1.2.15-dist/src/rrd_tune.c rrdtool-1.2.15/src/rrd_tune.c
--- rrdtool-1.2.15-dist/src/rrd_tune.c  2006-07-14 07:11:26.000000000 -0500
+++ rrdtool-1.2.15/src/rrd_tune.c       2006-10-26 15:13:14.000000000 -0500
@@ -290,7 +290,7 @@
                   rrd.ds_def[i].par[DS_min_val].u_val,
                   rrd.ds_def[i].par[DS_max_val].u_val);
                } else {
-               char *buffer;
+               char *buffer = 0;
                rpn_compact2str((rpn_cdefds_t *) 
&(rrd.ds_def[i].par[DS_cdef]),rrd.ds_def,&buffer);
                printf("DS[%s] typ: %s\tcdef: %s\n", 
rrd.ds_def[i].ds_nam,rrd.ds_def[i].dst,buffer);
            free(buffer);


-- 
Chris Adams <[EMAIL PROTECTED]>
Systems and Network Administrator - HiWAAY Internet Services
I don't speak for anybody but myself - that's enough trouble.

--
Unsubscribe mailto:[EMAIL PROTECTED]
Help        mailto:[EMAIL PROTECTED]
Archive     http://lists.ee.ethz.ch/rrd-developers
WebAdmin    http://lists.ee.ethz.ch/lsg2.cgi

Reply via email to