From d27916ce6dc22fd1280edd4bc0c835d8f17b0581 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 13 Aug 2013 06:46:51 +0000 Subject: [PATCH] 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. git-svn-id: svn://svn.tartarus.org/sgt/putty@10016 cda61777-01e9-0310-a592-d414129be87e --- pscp.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pscp.c b/pscp.c index 6f38a201..32099323 100644 --- a/pscp.c +++ b/pscp.c @@ -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"); -- 2.11.0