diff -r -u 7.19.4_lib/easy.c 7.19.4_lib_patched/easy.c
--- 7.19.4_lib/easy.c	2009-01-29 21:41:51.000000000 +0100
+++ 7.19.4_lib_patched/easy.c	2009-03-09 12:18:01.000000000 +0100
@@ -648,6 +648,15 @@
 
     /* duplicate all values in 'change' */
 
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)    
+    if(data->change.cookielist) {
+      outcurl->change.cookielist = curl_slist_duplicate(data->change.cookielist);
+
+      if (!outcurl->change.cookielist)
+        break;
+    }
+#endif   /* CURL_DISABLE_HTTP */
+
     if(data->change.url) {
       outcurl->change.url = strdup(data->change.url);
       if(!outcurl->change.url)
@@ -692,6 +701,10 @@
         Curl_rm_connc(outcurl->state.connc);
       if(outcurl->state.headerbuff)
         free(outcurl->state.headerbuff);
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)    
+      if(outcurl->change.cookielist)
+        curl_slist_free_all(outcurl->change.cookielist);
+#endif
       if(outcurl->change.url)
         free(outcurl->change.url);
       if(outcurl->change.referer)
diff -r -u 7.19.4_lib/sendf.c 7.19.4_lib_patched/sendf.c
--- 7.19.4_lib/sendf.c	2009-01-08 07:24:23.000000000 +0100
+++ 7.19.4_lib_patched/sendf.c	2009-03-09 12:20:09.000000000 +0100
@@ -117,6 +117,30 @@
   return new_item;
 }
 
+/*
+ * curl_slist_duplicate() duplicates a linked list. It always returns the
+ * address of the first record of the cloned list or NULL in case of an
+ * error (or if the input list was NULL).
+ */
+struct curl_slist *curl_slist_duplicate(struct curl_slist *inlist)
+{
+  struct curl_slist *outlist = NULL;
+  struct curl_slist *tmp;
+
+  while(inlist) {
+    tmp = curl_slist_append(outlist, inlist->data);
+
+    if (!tmp) {
+      curl_slist_free_all(outlist);
+      return NULL;
+    }
+
+    outlist = tmp;
+    inlist = inlist->next;
+  }
+  return outlist;
+}
+
 /* be nice and clean up resources */
 void curl_slist_free_all(struct curl_slist *list)
 {


