Mercurial > code
diff buffer.c @ 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 | fea13579acbe |
children | bbe0713e8e2a |
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);