From f80eeb6932099bc9143b267ad4814ef1874adcb0 Mon Sep 17 00:00:00 2001 From: John-Mark Gurney Date: Thu, 31 Dec 2020 02:19:53 +0000 Subject: [PATCH] Squashed 'libssh2/' changes from f75f3488..720998f3 720998f3 kex.c: fix simple typo, niumber -> number (#545) cfe0bf64 session.c: Correct a typo which may lead to stack overflow (#533) REVERT: f75f3488 add some debugging for understanding how these flags are set.. REVERT: 57635ddf disable read ahead algorithm so we don't waste bandwidth.. git-subtree-dir: libssh2 git-subtree-split: 720998f322f4bffffe531d5ec6a240c8c18459b2 --- src/kex.c | 2 +- src/session.c | 2 +- src/sftp.c | 13 ++++++++----- src/transport.c | 4 ---- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/kex.c b/src/kex.c index cc871e7..99a4a94 100644 --- a/src/kex.c +++ b/src/kex.c @@ -4069,7 +4069,7 @@ LIBSSH2_API int libssh2_session_supported_algs(LIBSSH2_SESSION* session, supported algorithms (needed to allocate the proper size of array) and the second time to actually copy the pointers. Typically this function will not be called often (typically at the beginning of a session) and - the number of algorithms (i.e. niumber of iterations in one loop) will + the number of algorithms (i.e. number of iterations in one loop) will not be high (typically it will not exceed 20) for quite a long time. So double looping really shouldn't be an issue and it is definitely a diff --git a/src/session.c b/src/session.c index 256eb99..212560b 100644 --- a/src/session.c +++ b/src/session.c @@ -219,7 +219,7 @@ banner_send(LIBSSH2_SESSION * session) } else { memcpy(banner_dup, banner, 255); - banner[255] = '\0'; + banner_dup[255] = '\0'; } _libssh2_debug(session, LIBSSH2_TRACE_TRANS, "Sending Banner: %s", diff --git a/src/sftp.c b/src/sftp.c index 378974c..ac7ee01 100644 --- a/src/sftp.c +++ b/src/sftp.c @@ -1414,9 +1414,12 @@ static ssize_t sftp_read(LIBSSH2_SFTP_HANDLE * handle, char *buffer, /* Number of bytes asked for that haven't been acked yet */ size_t already = (size_t)(filep->offset_sent - filep->offset); - size_t max_read_ahead = buffer_size; + size_t max_read_ahead = buffer_size*4; unsigned long recv_window; + if(max_read_ahead > LIBSSH2_CHANNEL_WINDOW_DEFAULT*4) + max_read_ahead = LIBSSH2_CHANNEL_WINDOW_DEFAULT*4; + /* if the buffer_size passed in now is smaller than what has already been sent, we risk getting count become a very large number */ @@ -1469,8 +1472,8 @@ static ssize_t sftp_read(LIBSSH2_SFTP_HANDLE * handle, char *buffer, uint32_t request_id; uint32_t size = count; - //if(size < buffer_size) - // size = buffer_size; + if(size < buffer_size) + size = buffer_size; if(size > MAX_SFTP_READ_SIZE) size = MAX_SFTP_READ_SIZE; @@ -1573,7 +1576,7 @@ static ssize_t sftp_read(LIBSSH2_SFTP_HANDLE * handle, char *buffer, else { /* we should never reach this point */ return _libssh2_error(session, LIBSSH2_ERROR_SFTP_PROTOCOL, - "sftp_read() internal error a"); + "sftp_read() internal error"); } } @@ -1719,7 +1722,7 @@ static ssize_t sftp_read(LIBSSH2_SFTP_HANDLE * handle, char *buffer, /* we should never reach this point */ return _libssh2_error(session, LIBSSH2_ERROR_SFTP_PROTOCOL, - "sftp_read() internal error b"); + "sftp_read() internal error"); } /* libssh2_sftp_read diff --git a/src/transport.c b/src/transport.c index dbee285..0723b77 100644 --- a/src/transport.c +++ b/src/transport.c @@ -376,8 +376,6 @@ int _libssh2_transport_read(LIBSSH2_SESSION * session) if((nread < 0) && (nread == -EAGAIN)) { session->socket_block_directions |= LIBSSH2_SESSION_BLOCK_INBOUND; - _libssh2_debug(session, LIBSSH2_TRACE_SOCKET, - "setting INBOUND flag, nread: %d", nread); return LIBSSH2_ERROR_EAGAIN; } _libssh2_debug(session, LIBSSH2_TRACE_SOCKET, @@ -413,8 +411,6 @@ int _libssh2_transport_read(LIBSSH2_SESSION * session) check is only done for the initial block since once we have got the start of a block we can in fact deal with fractions */ - _libssh2_debug(session, LIBSSH2_TRACE_SOCKET, - "setting INBOUND flag, numbytes: %d, blocksize: %d", numbytes, blocksize); session->socket_block_directions |= LIBSSH2_SESSION_BLOCK_INBOUND; return LIBSSH2_ERROR_EAGAIN;