From 58b85da8f26f8e61036783fe46215caaf50562c7 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 4 Nov 2016 20:44:45 -0700 Subject: [PATCH] GUACAMOLE-222: Ensure files downloaded via SFTP are explicitly closed upon completion. --- src/common-ssh/guac_sftp.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/common-ssh/guac_sftp.c b/src/common-ssh/guac_sftp.c index e7314d2a..953bfd64 100644 --- a/src/common-ssh/guac_sftp.c +++ b/src/common-ssh/guac_sftp.c @@ -373,18 +373,29 @@ static int guac_common_ssh_sftp_ack_handler(guac_user* user, } - /* If EOF, send end */ - else if (bytes_read == 0) { - guac_user_log(user, GUAC_LOG_DEBUG, "File sent"); - guac_protocol_send_end(user->socket, stream); - guac_user_free_stream(user, stream); - } - - /* Otherwise, fail stream */ + /* If bytes could not be read, handle EOF or error condition */ else { - guac_user_log(user, GUAC_LOG_INFO, "Error reading file"); - guac_protocol_send_end(user->socket, stream); - guac_user_free_stream(user, stream); + + /* If EOF, send end */ + if (bytes_read == 0) { + guac_user_log(user, GUAC_LOG_DEBUG, "File sent"); + guac_protocol_send_end(user->socket, stream); + guac_user_free_stream(user, stream); + } + + /* Otherwise, fail stream */ + else { + guac_user_log(user, GUAC_LOG_INFO, "Error reading file"); + guac_protocol_send_end(user->socket, stream); + guac_user_free_stream(user, stream); + } + + /* Close file */ + if (libssh2_sftp_close(file) == 0) + guac_user_log(user, GUAC_LOG_DEBUG, "File closed"); + else + guac_user_log(user, GUAC_LOG_INFO, "Unable to close file"); + } guac_socket_flush(user->socket);