1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-08-07 08:02:55 +03:00

resolve memory consumption bug

This commit is contained in:
Aris Adamantiadis
2010-10-03 13:31:02 +02:00
parent 0bc032726d
commit 9a89fba332
2 changed files with 19 additions and 2 deletions

View File

@@ -114,7 +114,7 @@ static int realloc_buffer(struct ssh_buffer_struct *buffer, int needed) {
char *new = NULL;
buffer_verify(buffer);
/* Find the smallest power of two which is greater or equal to needed */
while(smallest < needed) {
while(smallest <= needed) {
smallest <<= 1;
}
needed = smallest;
@@ -128,6 +128,20 @@ static int realloc_buffer(struct ssh_buffer_struct *buffer, int needed) {
return 0;
}
/** @internal
* @brief shifts a buffer to remove unused data in the beginning
* @param buffer SSH buffer
*/
static void buffer_shift(ssh_buffer buffer){
buffer_verify(buffer);
if(buffer->pos==0)
return;
memmove(buffer->data, buffer->data + buffer->pos, buffer->used - buffer->pos);
buffer->used -= buffer->pos;
buffer->pos=0;
buffer_verify(buffer);
}
/**
* @internal
*
@@ -167,6 +181,8 @@ int buffer_reinit(struct ssh_buffer_struct *buffer) {
int buffer_add_data(struct ssh_buffer_struct *buffer, const void *data, uint32_t len) {
buffer_verify(buffer);
if (buffer->allocated < (buffer->used + len)) {
if(buffer->pos > 0)
buffer_shift(buffer);
if (realloc_buffer(buffer, buffer->used + len) < 0) {
return -1;
}