]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Cleanup: remove some minor memory leaks in external ACL config parsing
authorAmos Jeffries <squid3@treenet.co.nz>
Wed, 10 Aug 2016 00:01:26 +0000 (12:01 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Wed, 10 Aug 2016 00:01:26 +0000 (12:01 +1200)
 Detected by Coveruty Scan. Issue 434089

src/external_acl.cc

index 9326989bcca36f3a50c5635ec4746a8de2e00b56..c34f566d6f490bcded8d2299bb5689d27ae4a434 100644 (file)
@@ -178,12 +178,14 @@ external_acl::~external_acl()
 void
 parse_externalAclHelper(external_acl ** list)
 {
-    external_acl *a = new external_acl;
     char *token = ConfigParser::NextToken();
 
-    if (!token)
+    if (!token) {
         self_destruct();
+        return;
+    }
 
+    external_acl *a = new external_acl;
     a->name = xstrdup(token);
 
     // Allow supported %macros inside quoted tokens
@@ -319,8 +321,11 @@ parse_externalAclHelper(external_acl ** list)
     }
 
     /* There must be at least one format token */
-    if (!a->format.format)
+    if (!a->format.format) {
+        delete a;
         self_destruct();
+        return;
+    }
 
     // format has implicit %DATA on the end if not used explicitly
     if (!data_used) {
@@ -330,8 +335,11 @@ parse_externalAclHelper(external_acl ** list)
     }
 
     /* helper */
-    if (!token)
+    if (!token) {
+        delete a;
         self_destruct();
+        return;
+    }
 
     wordlistAdd(&a->cmdline, token);
 
@@ -466,18 +474,25 @@ external_acl_data::~external_acl_data()
 void
 ACLExternal::parse()
 {
-    if (data)
+    if (data) {
         self_destruct();
+        return;
+    }
 
     char *token = ConfigParser::strtokFile();
 
-    if (!token)
+    if (!token) {
         self_destruct();
+        return;
+    }
 
     data = new external_acl_data(find_externalAclHelper(token));
 
-    if (!data->def)
+    if (!data->def) {
+        delete data;
         self_destruct();
+        return;
+    }
 
     // def->name is the name of the external_acl_type.
     // this is the name of the 'acl' directive being tested