Code

fix potential curl plugin curl_slist_append memory leak
authorBrandon Arp <brandon.arp@smartsheet.com>
Fri, 15 Apr 2016 18:37:44 +0000 (11:37 -0700)
committerRuben Kerkhof <ruben@rubenkerkhof.com>
Fri, 15 Apr 2016 19:02:13 +0000 (21:02 +0200)
make sure that we dont leak memory if curl_slist_append returns null

src/curl.c
src/curl_json.c
src/curl_xml.c

index 9d2196ac2c3e57d30858eebcbf83bdb39f4d6970..8b30fa4b0cf668cfb8e83bad92deb617460747ca 100644 (file)
@@ -165,16 +165,19 @@ static void cc_web_page_free (web_page_t *wp) /* {{{ */
 static int cc_config_append_string (const char *name, struct curl_slist **dest, /* {{{ */
     oconfig_item_t *ci)
 {
+  struct curl_slist *temp = NULL;
   if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING))
   {
     WARNING ("curl plugin: `%s' needs exactly one string argument.", name);
     return (-1);
   }
 
-  *dest = curl_slist_append(*dest, ci->values[0].value.string);
-  if (*dest == NULL)
+  temp = curl_slist_append(*dest, ci->values[0].value.string);
+  if (temp == NULL)
     return (-1);
 
+  *dest = temp;
+
   return (0);
 } /* }}} int cc_config_append_string */
 
index 6b8449c9e40a54f3c4e485e23f7d04b7f1a5029f..2314bfe9bd2c98a464b836dd21b175b3feee2460 100644 (file)
@@ -444,16 +444,19 @@ static c_avl_tree_t *cj_avl_create(void)
 static int cj_config_append_string (const char *name, struct curl_slist **dest, /* {{{ */
     oconfig_item_t *ci)
 {
+  struct curl_slist *temp = NULL;
   if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING))
   {
     WARNING ("curl_json plugin: `%s' needs exactly one string argument.", name);
     return (-1);
   }
 
-  *dest = curl_slist_append(*dest, ci->values[0].value.string);
-  if (*dest == NULL)
+  temp = curl_slist_append(*dest, ci->values[0].value.string);
+  if (temp == NULL)
     return (-1);
 
+  *dest = temp;
+
   return (0);
 } /* }}} int cj_config_append_string */
 
index d34b69efee25a4af6c050470117c03535399bf90..9483738bcf637e8178f99c739688be30c73fa954 100644 (file)
@@ -215,16 +215,19 @@ static void cx_free (void *arg) /* {{{ */
 static int cx_config_append_string (const char *name, struct curl_slist **dest, /* {{{ */
     oconfig_item_t *ci)
 {
+  struct curl_slist *temp = NULL;
   if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING))
   {
     WARNING ("curl_xml plugin: `%s' needs exactly one string argument.", name);
     return (-1);
   }
 
-  *dest = curl_slist_append(*dest, ci->values[0].value.string);
-  if (*dest == NULL)
+  temp = curl_slist_append(*dest, ci->values[0].value.string);
+  if (temp == NULL)
     return (-1);
 
+  *dest = temp;
+
   return (0);
 } /* }}} int cx_config_append_string */