From: Simon Tatham Date: Wed, 15 Feb 2017 21:41:28 +0000 (+0000) Subject: sink(): finish waiting for remote EOF after a local error. X-Git-Tag: 0.68~11 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=7fd8915ce9dabd124ee10374c33449ad912b607c;p=PuTTY.git sink(): finish waiting for remote EOF after a local error. We responded to a local error writing out the destination file by going into a mode where we just looped round receiving and throwing away data until our count of the file size reached the file size we expected - but once we were in that mode, we never actually incremented the count! --- diff --git a/pscp.c b/pscp.c index f7e09db9..454ec084 100644 --- a/pscp.c +++ b/pscp.c @@ -1561,8 +1561,7 @@ int scp_recv_filedata(char *data, int len) if (xfer_download_data(scp_sftp_xfer, &vbuf, &actuallen)) { if (actuallen <= 0) { - tell_user(stderr, "pscp: %s while reading", - actuallen < 0 ? "error" : "end of file"); + tell_user(stderr, "pscp: end of file while reading"); errs++; sfree(vbuf); return -1; @@ -1970,8 +1969,10 @@ static void sink(const char *targ, const char *src) read = scp_recv_filedata(transbuf, (int)blksize.lo); if (read <= 0) bump("Lost connection"); - if (wrerror) + if (wrerror) { + received = uint64_add32(received, read); continue; + } if (write_to_file(f, transbuf, read) != (int)read) { wrerror = 1; /* FIXME: in sftp we can actually abort the transfer */ @@ -1979,6 +1980,7 @@ static void sink(const char *targ, const char *src) printf("\r%-25.25s | %50s\n", stat_name, "Write error.. waiting for end of file"); + received = uint64_add32(received, read); continue; } if (statistics) {