mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-25 01:02:24 +00:00
Close the remote file handle if sftp_put_file's fstat fails.
Instead of abruptly returning from sftp_put_file in that situation, we now send an FXP_CLOSE instead. Patch due to Tim Kosse.
This commit is contained in:
parent
8c09f85a64
commit
dd0f1e5cc7
9
psftp.c
9
psftp.c
@ -668,21 +668,19 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart)
|
|||||||
if (restart) {
|
if (restart) {
|
||||||
char decbuf[30];
|
char decbuf[30];
|
||||||
struct fxp_attrs attrs;
|
struct fxp_attrs attrs;
|
||||||
int ret;
|
|
||||||
|
|
||||||
req = fxp_fstat_send(fh);
|
req = fxp_fstat_send(fh);
|
||||||
pktin = sftp_wait_for_reply(req);
|
pktin = sftp_wait_for_reply(req);
|
||||||
ret = fxp_fstat_recv(pktin, req, &attrs);
|
ret = fxp_fstat_recv(pktin, req, &attrs);
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
close_rfile(file);
|
|
||||||
printf("read size of %s: %s\n", outfname, fxp_error());
|
printf("read size of %s: %s\n", outfname, fxp_error());
|
||||||
return 0;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
if (!(attrs.flags & SSH_FILEXFER_ATTR_SIZE)) {
|
if (!(attrs.flags & SSH_FILEXFER_ATTR_SIZE)) {
|
||||||
close_rfile(file);
|
|
||||||
printf("read size of %s: size was not given\n", outfname);
|
printf("read size of %s: size was not given\n", outfname);
|
||||||
return 0;
|
ret = 0;
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
offset = attrs.size;
|
offset = attrs.size;
|
||||||
uint64_decimal(offset, decbuf);
|
uint64_decimal(offset, decbuf);
|
||||||
@ -735,6 +733,7 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart)
|
|||||||
|
|
||||||
xfer_cleanup(xfer);
|
xfer_cleanup(xfer);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
req = fxp_close_send(fh);
|
req = fxp_close_send(fh);
|
||||||
pktin = sftp_wait_for_reply(req);
|
pktin = sftp_wait_for_reply(req);
|
||||||
fxp_close_recv(pktin, req);
|
fxp_close_recv(pktin, req);
|
||||||
|
Loading…
Reference in New Issue
Block a user