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);