Mercurial > code
changeset 52:14c0b77f679b
Add buffer_shrink in buffer_end() and security if realloc fails
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 02 Nov 2011 16:19:20 +0100 |
parents | 82bbd3b869e3 |
children | bbe0713e8e2a |
files | buffer.c |
diffstat | 1 files changed, 7 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/buffer.c Fri Oct 07 17:43:48 2011 +0200 +++ b/buffer.c Wed Nov 02 16:19:20 2011 +0100 @@ -176,8 +176,10 @@ int buffer_shrink(struct buffer *buf) { - if ((buf->data = realloc(buf->data, buf->length + 1)) == NULL) + if ((buf->data = realloc(buf->data, buf->length + 1)) == NULL) { + buf->size = 0; return -1; + } buf->size = buf->length + 1; @@ -193,6 +195,7 @@ { char *data; + buffer_shrink(buf); data = buf->data; free(buf); @@ -240,8 +243,10 @@ while (newlen - buf->length - 1 <= needed) newlen += buf->bsize; - if ((buf->data = realloc(buf->data, newlen)) == NULL) + if ((buf->data = realloc(buf->data, newlen)) == NULL) { + buf->size = 0; return -1; + } buf->size = newlen; memset(buf->data + buf->length, 0, buf->size - buf->length);