1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-09 09:27:59 +00:00

It turns out I was a little over-strict in my handling of EOF in

pscp.c when I did the big revamp in r9279: I assumed that in any SCP
connection we would be the first to send EOF, but in fact this isn't
true - doing downloads with old-SCP, EOF is initiated by the server,
so we were spuriously reporting an error for 'unexpected' EOF when
everything had gone fine. Thanks to Nathan Phelan for the report.

[originally from svn r10016]
[r9279 == 947962e0b9]
This commit is contained in:
Simon Tatham 2013-08-13 06:46:51 +00:00
parent 293af847b5
commit 4ae1e260ea

12
pscp.c
View File

@ -41,6 +41,7 @@ static int try_sftp = 1;
static int main_cmd_is_sftp = 0;
static int fallback_cmd_is_sftp = 0;
static int using_sftp = 0;
static int uploading = 0;
static Backend *back;
static void *backhandle;
@ -231,11 +232,12 @@ int from_backend_untrusted(void *frontend_handle, const char *data, int len)
int from_backend_eof(void *frontend)
{
/*
* We expect to be the party deciding when to close the
* We usually expect to be the party deciding when to close the
* connection, so if we see EOF before we sent it ourselves, we
* should panic.
* should panic. The exception is if we're using old-style scp and
* downloading rather than uploading.
*/
if (!sent_eof) {
if ((using_sftp || uploading) && !sent_eof) {
connection_fatal(frontend,
"Received unexpected end-of-file from server");
}
@ -2047,6 +2049,8 @@ static void toremote(int argc, char *argv[])
char *cmd;
int i, wc_type;
uploading = 1;
targ = argv[argc - 1];
/* Separate host from filename */
@ -2136,6 +2140,8 @@ static void tolocal(int argc, char *argv[])
char *src, *targ, *host, *user;
char *cmd;
uploading = 0;
if (argc != 2)
bump("More than one remote source not supported");