Code

fix for segfault in rrd_cgi: caused by freeing a invalid address when printing an...
[rrdtool.git] / src / rrd_cgi.c
index 8038a3082334dedf411a0e7f70f0102125b1c181..9f0a0bd879afe822e28e9ec759a782955a597bda 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * RRDtool 1.2.26  Copyright by Tobi Oetiker, 1997-2007
+ * RRDtool 1.2.29  Copyright by Tobi Oetiker, 1997-2008
  *****************************************************************************
  * rrd_cgi.c  RRD Web Page Generator
  *****************************************************************************/
@@ -305,6 +305,7 @@ static void calfree (void){
     if (calcpr) {
            free(calcpr);
     }
+    calcpr=NULL;
   }
 }
 
@@ -778,7 +779,6 @@ char* drawgraph(long argc, const char **args){
       char *err = malloc((strlen(rrd_get_error())+DS_NAM_SIZE)*sizeof(char));
       sprintf(err, "[ERROR: %s]",rrd_get_error());
       rrd_clear_error();
-      calfree();
       return err;
     }
   }
@@ -1287,7 +1287,7 @@ s_var **rrdcgiReadVariables(void)
        if (i<numargs) {
 
            /* try to find out if there's already such a variable */
-           for (k=0; k<i && (strncmp (result[k]->name,cp, esp-cp) || !(strlen (result[k]->name) == esp-cp)); k++);
+           for (k=0; k<i && (strncmp (result[k]->name,cp, esp-cp) || !(strlen (result[k]->name) == (size_t)(esp-cp))); k++);
 
            if (k == i) {       /* No such variable yet */
                if ((result[i] = (s_var *)malloc(sizeof(s_var))) == NULL)