]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Close the remote file handle if sftp_put_file's fstat fails.
authorSimon Tatham <anakin@pobox.com>
Sat, 20 Dec 2014 16:53:01 +0000 (16:53 +0000)
committerSimon Tatham <anakin@pobox.com>
Sat, 20 Dec 2014 16:59:55 +0000 (16:59 +0000)
Instead of abruptly returning from sftp_put_file in that situation, we
now send an FXP_CLOSE instead. Patch due to Tim Kosse.

psftp.c

diff --git a/psftp.c b/psftp.c
index 3fbd0c43c8ba9f596ac4f7596bd97e9c4e3b28cc..1d331603cbf7f5ea67a641466ce1eba546c9d670 100644 (file)
--- a/psftp.c
+++ b/psftp.c
@@ -668,21 +668,19 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart)
     if (restart) {
        char decbuf[30];
        struct fxp_attrs attrs;
-       int ret;
 
        req = fxp_fstat_send(fh);
         pktin = sftp_wait_for_reply(req);
        ret = fxp_fstat_recv(pktin, req, &attrs);
 
        if (!ret) {
-           close_rfile(file);
            printf("read size of %s: %s\n", outfname, fxp_error());
-           return 0;
+            goto cleanup;
        }
        if (!(attrs.flags & SSH_FILEXFER_ATTR_SIZE)) {
-           close_rfile(file);
            printf("read size of %s: size was not given\n", outfname);
-           return 0;
+            ret = 0;
+            goto cleanup;
        }
        offset = attrs.size;
        uint64_decimal(offset, decbuf);
@@ -735,6 +733,7 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart)
 
     xfer_cleanup(xfer);
 
+  cleanup:
     req = fxp_close_send(fh);
     pktin = sftp_wait_for_reply(req);
     fxp_close_recv(pktin, req);