From 3d3347c0625ce29b5581a0aa45e6e3be580769f1 Mon Sep 17 00:00:00 2001 From: Marc Hoersken Date: Mon, 23 Mar 2015 23:17:31 +0100 Subject: [PATCH] scp.c: improved command length calculation Reduced number of calls to strlen, because shell_quotearg already returns the length of the resulting string (e.q. quoted path) which we can add to the existing and known cmd_len. Removed obsolete call to memset again, because we can put a final NULL-byte at the end of the string using the calculated length. --- src/scp.c | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/src/scp.c b/src/scp.c index d2cbf95..c56f46c 100644 --- a/src/scp.c +++ b/src/scp.c @@ -299,18 +299,12 @@ scp_recv(LIBSSH2_SESSION * session, const char *path, struct stat * sb) "scp -%sf ", sb?"p":""); cmd_len = strlen((char *)session->scpRecv_command); + cmd_len += shell_quotearg(path, + &session->scpRecv_command[cmd_len], + session->scpRecv_command_len - cmd_len); - memset(&session->scpRecv_command[cmd_len], 0, - session->scpRecv_command_len - cmd_len); - - (void)shell_quotearg(path, - &session->scpRecv_command[cmd_len], - session->scpRecv_command_len - cmd_len); - - session->scpRecv_command[session->scpRecv_command_len - 1] = '\0'; - - session->scpRecv_command_len = - strlen((char *)session->scpRecv_command); + session->scpRecv_command[cmd_len] = '\0'; + session->scpRecv_command_len = cmd_len + 1; _libssh2_debug(session, LIBSSH2_TRACE_SCP, "Opening channel for SCP receive"); @@ -811,18 +805,12 @@ scp_send(LIBSSH2_SESSION * session, const char *path, int mode, "scp -%st ", (mtime || atime)?"p":""); cmd_len = strlen((char *)session->scpSend_command); + cmd_len += shell_quotearg(path, + &session->scpSend_command[cmd_len], + session->scpSend_command_len - cmd_len); - memset(&session->scpSend_command[cmd_len], 0, - session->scpSend_command_len - cmd_len); - - (void)shell_quotearg(path, - &session->scpSend_command[cmd_len], - session->scpSend_command_len - cmd_len); - - session->scpSend_command[session->scpSend_command_len - 1] = '\0'; - - session->scpSend_command_len = - strlen((char *)session->scpSend_command); + session->scpSend_command[cmd_len] = '\0'; + session->scpSend_command_len = cmd_len + 1; _libssh2_debug(session, LIBSSH2_TRACE_SCP, "Opening channel for SCP send");