diff options
author | Daniel Stenberg <daniel@haxx.se> | 2004-05-10 14:21:19 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2004-05-10 14:21:19 +0000 |
commit | b8541929c8d9afc29f70289a1cdc209046808b10 (patch) | |
tree | 9a6fd349351989a3467ff09100d321e014f4799d | |
parent | 329f17ac7ca799a104cb51ec7e03e4f7e979e20d (diff) |
curl_slist_append() fixed to clear up properly if a memory function fails
-rw-r--r-- | lib/sendf.c | 26 |
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); |