From: Amos Jeffries Date: Thu, 29 Nov 2012 11:20:18 +0000 (-0700) Subject: Various memory leaks in configuration parsing X-Git-Tag: SQUID_3_2_4~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bf6b84a62c1d70c2f85b7671e46c56d2dc299740;p=thirdparty%2Fsquid.git Various memory leaks in configuration parsing 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. --- diff --git a/src/adaptation/icap/Options.cc b/src/adaptation/icap/Options.cc index f216658027..372c711e9a 100644 --- a/src/adaptation/icap/Options.cc +++ b/src/adaptation/icap/Options.cc @@ -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); + } } } diff --git a/src/cache_cf.cc b/src/cache_cf.cc index 75b9a80ee6..4448215233 100644 --- a/src/cache_cf.cc +++ b/src/cache_cf.cc @@ -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; } diff --git a/src/main.cc b/src/main.cc index d6eb01aa87..38af4d4382 100644 --- a/src/main.cc +++ b/src/main.cc @@ -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':