aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2004-05-10 14:21:19 +0000
committerDaniel Stenberg <daniel@haxx.se>2004-05-10 14:21:19 +0000
commitb8541929c8d9afc29f70289a1cdc209046808b10 (patch)
tree9a6fd349351989a3467ff09100d321e014f4799d
parent329f17ac7ca799a104cb51ec7e03e4f7e979e20d (diff)
curl_slist_append() fixed to clear up properly if a memory function fails
-rw-r--r--lib/sendf.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/lib/sendf.c b/lib/sendf.c
index 69366f29e..4c3405566 100644
--- a/lib/sendf.c
+++ b/lib/sendf.c
@@ -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);