curl_slist_append() fixed to clear up properly if a memory function fails
authorDaniel Stenberg <daniel@haxx.se>
Mon, 10 May 2004 14:21:19 +0000 (14:21 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 10 May 2004 14:21:19 +0000 (14:21 +0000)
lib/sendf.c

index 69366f2..4c34055 100644 (file)
@@ -74,11 +74,13 @@ static struct curl_slist *slist_get_last(struct curl_slist *list)
   return item;
 }
 
-/* append a struct to the linked list. It always retunrs the address of the
- * first record, so that you can sure this function as an initialization
- * function as well as an append function. If you find this bothersome,
- * then simply create a separate _init function and call it appropriately from
- * within the proram. */
+/*
+ * curl_slist_append() appends a string to the linked list. It always retunrs
+ * the address of the first record, so that you can sure this function as an
+ * initialization function as well as an append function. If you find this
+ * bothersome, then simply create a separate _init function and call it
+ * appropriately from within the proram.
+ */
 struct curl_slist *curl_slist_append(struct curl_slist *list,
                                      const char *data)
 {
@@ -87,12 +89,18 @@ struct curl_slist *curl_slist_append(struct curl_slist *list,
 
   new_item = (struct curl_slist *) malloc(sizeof(struct curl_slist));
   if (new_item) {
-    new_item->next = NULL;
-    new_item->data = strdup(data);
+    char *dup = strdup(data);
+    if(dup) {
+      new_item->next = NULL;
+      new_item->data = dup;
+    }
+    else {
+      free(new_item);
+      return NULL;
+    }
   }
-  if (new_item == NULL || new_item->data == NULL) {
+  else
     return NULL;
-  }
 
   if (list) {
     last = slist_get_last(list);