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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user