X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/df0870fc8ceb5a8fea66a4d0fe00e7db12317e33..5d145a14925b0ea8a60af808252a7c3cf78f9631:/psftp.c diff --git a/psftp.c b/psftp.c index c1d4950b..d395b6f1 100644 --- a/psftp.c +++ b/psftp.c @@ -472,6 +472,8 @@ int sftp_general_get(struct sftp_command *cmd, int restart) ret = 0; xfer_set_error(xfer); } + + sfree(vbuf); } } @@ -614,12 +616,13 @@ int sftp_general_put(struct sftp_command *cmd, int restart) } } - pktin = sftp_recv(); - ret = xfer_upload_gotpkt(xfer, pktin); - - if (!ret) { - printf("error while writing: %s\n", fxp_error()); - err = 1; + if (!xfer_done(xfer)) { + pktin = sftp_recv(); + ret = xfer_upload_gotpkt(xfer, pktin); + if (!ret) { + printf("error while writing: %s\n", fxp_error()); + err = 1; + } } } @@ -1637,14 +1640,13 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen) unsigned char *p = (unsigned char *) data; unsigned len = (unsigned) datalen; - assert(len > 0); - /* * stderr data is just spouted to local stderr and otherwise * ignored. */ if (is_stderr) { - fwrite(data, 1, len, stderr); + if (len > 0) + fwrite(data, 1, len, stderr); return 0; } @@ -1654,7 +1656,7 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen) if (!outptr) return 0; - if (outlen > 0) { + if ((outlen > 0) && (len > 0)) { unsigned used = outlen; if (used > len) used = len;