1
0
mirror of https://github.com/libssh2/libssh2.git synced 2025-11-23 01:22:37 +03:00

sftp_read: cap the read ahead maximum amount

Now we only go up to LIBSSH2_CHANNEL_WINDOW_DEFAULT*30 bytes SFTP read
ahead, which currently equals 64K*30 == 1966080 bytes.
This commit is contained in:
Daniel Stenberg
2011-09-08 22:47:38 +02:00
parent 81bdcf61f3
commit 10b66cef08

View File

@@ -1110,10 +1110,14 @@ static ssize_t sftp_read(LIBSSH2_SFTP_HANDLE * handle, char *buffer,
/* We allow a number of bytes being requested at any given time without /* We allow a number of bytes being requested at any given time without
having been acked - until we reach EOF. */ having been acked - until we reach EOF. */
if(!filep->eof) { if(!filep->eof) {
size_t max_read_ahead = buffer_size*4;
if(max_read_ahead > LIBSSH2_CHANNEL_WINDOW_DEFAULT*30)
max_read_ahead = LIBSSH2_CHANNEL_WINDOW_DEFAULT*30;
/* if the buffer_size passed in now is smaller than what has already /* if the buffer_size passed in now is smaller than what has already
been sent, we risk getting count become a very large number */ been sent, we risk getting count become a very large number */
if((buffer_size*4) > already) if(max_read_ahead > already)
count = (buffer_size*4) - already; count = max_read_ahead - already;
/* 'count' is how much more data to ask for, and 'already' is how much /* 'count' is how much more data to ask for, and 'already' is how much
data that already has been asked for but not yet returned. So, if data that already has been asked for but not yet returned. So, if