Commit b8541929 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

curl_slist_append() fixed to clear up properly if a memory function fails

parent 329f17ac
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -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) {
    char *dup = strdup(data);
    if(dup) {
      new_item->next = NULL;
    new_item->data = strdup(data);
      new_item->data = dup;
    }
  if (new_item == NULL || new_item->data == NULL) {
    else {
      free(new_item);
      return NULL;
    }
  }
  else
    return NULL;

  if (list) {
    last = slist_get_last(list);