зеркало из https://github.com/github/putty.git
The xfer mechanism wasn't gracefully terminating when an error was
encountered part way through transfer. In particular, this caused psftp to hang (waiting for FXP_READ replies which had already arrived) if you try `get' (without -r) on a remote directory. [originally from svn r5005]
This commit is contained in:
Родитель
cac296d9c0
Коммит
d649075539
7
psftp.c
7
psftp.c
|
@ -201,7 +201,7 @@ int sftp_get_file(char *fname, char *outfname, int recurse, int restart,
|
|||
struct fxp_xfer *xfer;
|
||||
uint64 offset;
|
||||
FILE *fp;
|
||||
int ret;
|
||||
int ret, shown_err = FALSE;
|
||||
|
||||
/*
|
||||
* In recursive mode, see if we're dealing with a directory.
|
||||
|
@ -443,7 +443,10 @@ int sftp_get_file(char *fname, char *outfname, int recurse, int restart,
|
|||
ret = xfer_download_gotpkt(xfer, pktin);
|
||||
|
||||
if (ret < 0) {
|
||||
printf("error while reading: %s\n", fxp_error());
|
||||
if (!shown_err) {
|
||||
printf("error while reading: %s\n", fxp_error());
|
||||
shown_err = TRUE;
|
||||
}
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
|
|
5
sftp.c
5
sftp.c
|
@ -1089,7 +1089,8 @@ int xfer_done(struct fxp_xfer *xfer)
|
|||
|
||||
void xfer_download_queue(struct fxp_xfer *xfer)
|
||||
{
|
||||
while (xfer->req_totalsize < xfer->req_maxsize && !xfer->eof) {
|
||||
while (xfer->req_totalsize < xfer->req_maxsize &&
|
||||
!xfer->eof && !xfer->err) {
|
||||
/*
|
||||
* Queue a new read request.
|
||||
*/
|
||||
|
@ -1155,6 +1156,8 @@ int xfer_download_gotpkt(struct fxp_xfer *xfer, struct sftp_packet *pktin)
|
|||
#endif
|
||||
} else if (rr->retlen < 0) {
|
||||
/* some error other than EOF; signal it back to caller */
|
||||
xfer_set_error(xfer);
|
||||
rr->complete = -1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче