1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-11-30 13:01:23 +03:00

Fix a memory leak in realloc_buffer.

If realloc fails, the original block is left untouched. So
don't overwrite it that we can free it.


git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@411 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
Andreas Schneider
2009-04-07 13:48:34 +00:00
parent d1fefb4de3
commit fe2bc30984

View File

@@ -68,16 +68,19 @@ void buffer_free(struct buffer_struct *buffer) {
static int realloc_buffer(struct buffer_struct *buffer, int needed) { static int realloc_buffer(struct buffer_struct *buffer, int needed) {
int smallest = 1; int smallest = 1;
char *new = NULL;
/* Find the smallest power of two which is greater or equal to needed */ /* Find the smallest power of two which is greater or equal to needed */
while(smallest <= needed) { while(smallest <= needed) {
smallest <<= 1; smallest <<= 1;
} }
needed = smallest; needed = smallest;
buffer->data = realloc(buffer->data, needed); new = realloc(buffer->data, needed);
if (buffer->data == NULL) { if (new == NULL) {
return -1; return -1;
} }
buffer->data = new;
buffer->allocated = needed; buffer->allocated = needed;
return 0; return 0;
} }