better error checks for failure conditions (based on Puneet Pawaia's reports)
authorDaniel Stenberg <daniel@haxx.se>
Tue, 3 Apr 2001 10:20:23 +0000 (10:20 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 3 Apr 2001 10:20:23 +0000 (10:20 +0000)
lib/ftp.c
lib/transfer.c
lib/url.c

index 53f8df1..701b497 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -1720,12 +1720,14 @@ CURLcode Curl_ftp_disconnect(struct connectdata *conn)
 {
   struct FTP *ftp= conn->proto.ftp;
 
-  if(ftp->user)
-    free(ftp->user);
-  if(ftp->passwd)
-    free(ftp->passwd);
-  if(ftp->entrypath)
-    free(ftp->entrypath);
-
+  /* The FTP session may or may not have been allocated/setup at this point! */
+  if(ftp) {
+    if(ftp->user)
+      free(ftp->user);
+    if(ftp->passwd)
+      free(ftp->passwd);
+    if(ftp->entrypath)
+      free(ftp->entrypath);
+  }
   return CURLE_OK;
 }
index 1f2c688..48706c5 100644 (file)
@@ -955,7 +955,7 @@ CURLcode Curl_perform(CURL *curl)
 
   } while(1); /* loop if Location: */
 
-  if(conn->newurl) {
+  if((CURLE_OK == res) && conn->newurl) {
     free(conn->newurl);
     conn->newurl = NULL;
   }
index 2840d32..5bb34be 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -816,6 +816,9 @@ CURLcode Curl_disconnect(struct connectdata *conn)
     free(conn->hostent_buf);
 #endif
 
+  if(conn->newurl)
+    free(conn->newurl);
+
   if(conn->path) /* the URL path part */
     free(conn->path);
 
@@ -2147,8 +2150,10 @@ CURLcode Curl_connect(struct UrlData *data,
     /* We're not allowed to return failure with memory left allocated
        in the connectdata struct, free those here */
     conn = (struct connectdata *)*in_connect;
-    if(conn)
+    if(conn) {
       Curl_disconnect(conn);      /* close the connection */
+      *in_connect = NULL;         /* return a NULL */
+    }
   }
   return code;
 }