From f78c9165a1e417b6d2304ee36b219ccd09751a1c Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Thu, 11 Jul 2013 17:24:44 +0000 Subject: [PATCH] Fix a couple of code paths on which, if fxp_readdir returned an error, we would return without first closing the directory handle we had used as an argument. [originally from svn r9913] --- pscp.c | 5 +++++ psftp.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/pscp.c b/pscp.c index 0dbe1e34..4c6aba73 100644 --- a/pscp.c +++ b/pscp.c @@ -1348,6 +1348,11 @@ int scp_get_sink_action(struct scp_sink_action *act) break; tell_user(stderr, "scp: reading directory %s: %s\n", fname, fxp_error()); + + req = fxp_close_send(dirhandle); + pktin = sftp_wait_for_reply(req); + fxp_close_recv(pktin, req); + if (must_free_fname) sfree(fname); sfree(ournames); errs++; diff --git a/psftp.c b/psftp.c index 65d0dc50..26f24f9c 100644 --- a/psftp.c +++ b/psftp.c @@ -291,6 +291,11 @@ int sftp_get_file(char *fname, char *outfname, int recurse, int restart) if (fxp_error_type() == SSH_FX_EOF) break; printf("%s: reading directory: %s\n", fname, fxp_error()); + + req = fxp_close_send(dirhandle); + pktin = sftp_wait_for_reply(req); + fxp_close_recv(pktin, req); + sfree(ournames); return 0; }