From 82e095a2759366485c3cb33739992c85ca8a05cc Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sun, 9 Mar 2008 11:37:48 +0000 Subject: - 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. --- lib/ssh.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'lib') 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); -- cgit v1.2.3