mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-10 01:48:00 +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:
parent
293af847b5
commit
4ae1e260ea
12
pscp.c
12
pscp.c
@ -41,6 +41,7 @@ static int try_sftp = 1;
|
|||||||
static int main_cmd_is_sftp = 0;
|
static int main_cmd_is_sftp = 0;
|
||||||
static int fallback_cmd_is_sftp = 0;
|
static int fallback_cmd_is_sftp = 0;
|
||||||
static int using_sftp = 0;
|
static int using_sftp = 0;
|
||||||
|
static int uploading = 0;
|
||||||
|
|
||||||
static Backend *back;
|
static Backend *back;
|
||||||
static void *backhandle;
|
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)
|
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
|
* 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,
|
connection_fatal(frontend,
|
||||||
"Received unexpected end-of-file from server");
|
"Received unexpected end-of-file from server");
|
||||||
}
|
}
|
||||||
@ -2047,6 +2049,8 @@ static void toremote(int argc, char *argv[])
|
|||||||
char *cmd;
|
char *cmd;
|
||||||
int i, wc_type;
|
int i, wc_type;
|
||||||
|
|
||||||
|
uploading = 1;
|
||||||
|
|
||||||
targ = argv[argc - 1];
|
targ = argv[argc - 1];
|
||||||
|
|
||||||
/* Separate host from filename */
|
/* Separate host from filename */
|
||||||
@ -2136,6 +2140,8 @@ static void tolocal(int argc, char *argv[])
|
|||||||
char *src, *targ, *host, *user;
|
char *src, *targ, *host, *user;
|
||||||
char *cmd;
|
char *cmd;
|
||||||
|
|
||||||
|
uploading = 0;
|
||||||
|
|
||||||
if (argc != 2)
|
if (argc != 2)
|
||||||
bump("More than one remote source not supported");
|
bump("More than one remote source not supported");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user