SFTP: gracefully handle shutdown early
authorDaniel Stenberg <daniel@haxx.se>
Sat, 12 Mar 2011 23:15:59 +0000 (00:15 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 12 Mar 2011 23:15:59 +0000 (00:15 +0100)
When using the multi interface and a handle using SFTP was removed very
early on, we would get a segfault due to the code assumed data was there
that hadn't yet been setup.

Bug: http://curl.haxx.se/mail/lib-2011-03/0066.html
Reported by: Saqib Ali

lib/ssh.c

index e67dbdd..434b80d 100644 (file)
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -2047,8 +2047,10 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
         }
         sshc->sftp_handle = NULL;
       }
-      Curl_safefree(sftp_scp->path);
-      sftp_scp->path = NULL;
+      if(sftp_scp) {
+        Curl_safefree(sftp_scp->path);
+        sftp_scp->path = NULL;
+      }
 
       DEBUGF(infof(data, "SFTP DONE done\n"));
 #if 0 /* PREV */
@@ -2752,8 +2754,10 @@ static CURLcode ssh_done(struct connectdata *conn, CURLcode status)
   else
     result = status;
 
-  Curl_safefree(sftp_scp->path);
-  sftp_scp->path = NULL;
+  if(sftp_scp) {
+    Curl_safefree(sftp_scp->path);
+    sftp_scp->path = NULL;
+  }
   Curl_pgrsDone(conn);
 
   conn->data->req.keepon = 0; /* clear all bits */