fix out of memory handling issue
authorYang Tse <yangsita@gmail.com>
Sat, 7 Apr 2007 04:51:35 +0000 (04:51 +0000)
committerYang Tse <yangsita@gmail.com>
Sat, 7 Apr 2007 04:51:35 +0000 (04:51 +0000)
lib/cookie.c
lib/ssluse.c

index e64bc49..d25eb69 100644 (file)
@@ -1005,13 +1005,18 @@ struct curl_slist *Curl_cookie_list(struct SessionHandle *data)
     /* fill the list with _all_ the cookies we know */
     line = get_netscape_format(c);
     if (line == NULL) {
-      /* get_netscape_format returns null only if we run out of memory */
-
-      curl_slist_free_all(beg); /* free some memory */
+      curl_slist_free_all(beg);
       return NULL;
     }
     list = curl_slist_append(list, line);
     free(line);
+    if (list == NULL) {
+      curl_slist_free_all(beg);
+      return NULL;
+    }
+    else if (beg == NULL) {
+      beg = list;
+    }
     c = c->next;
   }
 
index d96ee13..5c2999d 100644 (file)
@@ -678,10 +678,19 @@ struct curl_slist *Curl_ossl_engines_list(struct SessionHandle *data)
 {
   struct curl_slist *list = NULL;
 #if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H)
+  struct curl_slist *beg = NULL;
   ENGINE *e;
 
-  for (e = ENGINE_get_first(); e; e = ENGINE_get_next(e))
+  for (e = ENGINE_get_first(); e; e = ENGINE_get_next(e)) {
     list = curl_slist_append(list, ENGINE_get_id(e));
+    if (list == NULL) {
+      curl_slist_free_all(beg);
+      return NULL;
+    }
+    else if (beg == NULL) {
+      beg = list;
+    }
+  }
 #endif
   (void) data;
   return (list);