]> git.ipfire.org Git - thirdparty/rrdtool-1.x.git/commitdiff
src/rrd_fetch.c: fix Coverity CID#26524 Resource leak
authorMarek Schimara <Marek.Schimara@bull.net>
Thu, 16 Jun 2016 11:55:39 +0000 (13:55 +0200)
committerMarek Schimara <Marek.Schimara@bull.net>
Thu, 23 Jun 2016 14:32:33 +0000 (16:32 +0200)
        CWE-404 / https://cwe.mitre.org/data/definitions/404.html

src/rrd_fetch.c

index 23515c022ed7384d3c95151520965940a1aa769e..0256af8e360eb2bb8d76906ca9f8467c55d40d34 100644 (file)
@@ -101,12 +101,14 @@ int rrd_fetch(
         case 's':
             if ((parsetime_error = rrd_parsetime(options.optarg, &start_tv))) {
                 rrd_set_error("start time: %s", parsetime_error);
+                if (opt_daemon) free(opt_daemon);
                 return -1;
             }
             break;
         case 'e':
             if ((parsetime_error = rrd_parsetime(options.optarg, &end_tv))) {
                 rrd_set_error("end time: %s", parsetime_error);
+                if (opt_daemon) free(opt_daemon);
                 return -1;
             }
             break;
@@ -116,6 +118,7 @@ int rrd_fetch(
         case 'r':
             if ((parsetime_error = rrd_scaled_duration(options.optarg, 1, &step_tmp))) {
                 rrd_set_error("resolution: %s", parsetime_error);
+                if (opt_daemon) free(opt_daemon);
                 return -1;
             }
             break;
@@ -133,17 +136,20 @@ int rrd_fetch(
 
         case '?':
             rrd_set_error("%s", options.errmsg);
+            if (opt_daemon) free(opt_daemon);
             return -1;
         }
     }
 
 
     if (rrd_proc_start_end(&start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
+        if (opt_daemon) free(opt_daemon);
         return -1;
     }
 
     if (start_tmp < 3600 * 24 * 365 * 10) {
         rrd_set_error("the first entry to fetch should be after 1980");
+        if (opt_daemon) free(opt_daemon);
         return (-1);
     }
 
@@ -156,6 +162,7 @@ int rrd_fetch(
     if (end_tmp < start_tmp) {
         rrd_set_error("start (%ld) should be less than end (%ld)", start_tmp,
                       end_tmp);
+        if (opt_daemon) free(opt_daemon);
         return (-1);
     }
 
@@ -165,6 +172,7 @@ int rrd_fetch(
 
     if (options.optind + 1 >= options.argc) {
         rrd_set_error("Usage: rrdtool %s <file> <CF> [options]", options.argv[0]);
+        if (opt_daemon) free(opt_daemon);
         return -1;
     }
 
@@ -179,6 +187,7 @@ int rrd_fetch(
            status = rrd_fetch_r(options.argv[options.optind],
                            cf, start, end, step, ds_cnt, ds_namv, data);
 
+    if (opt_daemon) free(opt_daemon);
     if (status != 0)
         return (-1);
     return (0);