From 4ae1e260eac7ef0b9d4b444543c33d1467a7a81b Mon Sep 17 00:00:00 2001 From: Simon Tatham 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. [originally from svn r10016] [r9279 == 947962e0b95e10151c186048a8b5cc2fb425838c] --- 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");