aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2008-03-09 11:37:48 +0000
committerDaniel Stenberg <daniel@haxx.se>2008-03-09 11:37:48 +0000
commit82e095a2759366485c3cb33739992c85ca8a05cc (patch)
tree3900cd1dba152458e7839f30fce8a0fd6e0bb33c /lib
parent0e40261a11079118d27b93f5503208b6699acc69 (diff)
- Brian Ulm reported a crash when doing a second SFTP transfer on a re-used
easy handle if curl_easy_reset() was used between them. I fixed it and Brian verified that it cured his problem. - Brian Ulm reported that if you first tried to download a non-existing SFTP file and then fetched an existing one and re-used the handle, libcurl would still report the second one as non-existing as well! I fixed it abd Brian verified that it cured his problem.
Diffstat (limited to 'lib')
-rw-r--r--lib/ssh.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/ssh.c b/lib/ssh.c
index 88d5833d9..22d3ecb27 100644
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -1663,7 +1663,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
}
else {
result = Curl_setup_transfer(conn, FIRSTSOCKET, data->req.size,
- FALSE, NULL, -1, NULL);
+ FALSE, NULL, -1, NULL);
}
if(result) {
state(conn, SSH_SFTP_CLOSE);
@@ -1966,6 +1966,9 @@ static CURLcode ssh_init(struct connectdata *conn)
{
struct SessionHandle *data = conn->data;
struct SSHPROTO *ssh;
+
+ conn->proto.sshc.actualcode = CURLE_OK; /* reset error code */
+
if(data->state.proto.ssh)
return CURLE_OK;
@@ -2109,6 +2112,18 @@ static CURLcode ssh_do(struct connectdata *conn, bool *done)
*done = FALSE; /* default to false */
+ /*
+ Since connections can be re-used between SessionHandles, this might be a
+ connection already existing but on a fresh SessionHandle struct so we must
+ make sure we have a good 'struct SSHPROTO' to play with. For new
+ connections, the struct SSHPROTO is allocated and setup in the
+ ssh_connect() function.
+ */
+ Curl_reset_reqproto(conn);
+ res = ssh_init(conn);
+ if(res)
+ return res;
+
data->req.size = -1; /* make sure this is unknown at this point */
Curl_pgrsSetUploadCounter(data, 0);