]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Various memory leaks in configuration parsing
authorAmos Jeffries <squid3@treenet.co.nz>
Thu, 29 Nov 2012 11:20:18 +0000 (04:20 -0700)
committerAmos Jeffries <squid3@treenet.co.nz>
Thu, 29 Nov 2012 11:20:18 +0000 (04:20 -0700)
This lot are all small issues derived from allocating new memory and
assigning to a pointer already pointing at previous allocation, or
passing xstrdup() output to a caller which does not directly hold the
passed memory.
 Both cases will disappear once we clean up the string handling in Squid
but for now these still need fixing to avoid leaking memory.

 Detected by Coverity Scan. Issues 740430, 740432, 740439.

src/adaptation/icap/Options.cc
src/cache_cf.cc
src/main.cc

index f216658027e75db2dcba8b697bf7f6aa1308cb75..372c711e9a3ecbc9bb47ad98b25b2d86eaa46361 100644 (file)
@@ -205,8 +205,11 @@ void Adaptation::Icap::Options::TransferList::parse(const String &buf, bool &fou
     while (strListGetItem(&buf, ',', &item, &ilen, &pos)) {
         if (ilen == 1 && *item == '*')
             foundStar = true;
-        else
-            add(xstrndup(item, ilen+1));
+        else {
+            const char *tmp = xstrndup(item, ilen+1);
+            add(tmp);
+            xfree(tmp);
+        }
     }
 }
 
index 75b9a80ee6370e153ed69902f6d4a434d9e16135..444821523371e462219d23bbe02852a524875a08 100644 (file)
@@ -540,6 +540,7 @@ parseOneConfigFile(const char *file_name, unsigned int depth)
     cfg_filename = orig_cfg_filename;
     config_lineno = orig_config_lineno;
 
+    xfree(tmp_line);
     return err_count;
 }
 
index d6eb01aa87c7f95c17129cefef6f6ba6b5cc07bc..38af4d43824fe7f7140eba4dbdd2a95290462ae6 100644 (file)
@@ -512,6 +512,7 @@ mainParseOptions(int argc, char *argv[])
             /** \par l
              * Stores the syslog facility name in global opt_syslog_facility
              * then performs actions for -s option. */
+            xfree(opt_syslog_facility); // ignore any previous options sent
             opt_syslog_facility = xstrdup(optarg);
 
         case 's':