changeset 1508:97b8096f16dc

Initialize the memory in growbuf.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 11 May 2018 22:22:23 +0300
parents 7d012e5acf5c
children 15afe578f0ae
files src/dmgrowbuf.c
diffstat 1 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/dmgrowbuf.c	Fri May 11 20:28:48 2018 +0300
+++ b/src/dmgrowbuf.c	Fri May 11 22:22:23 2018 +0300
@@ -30,7 +30,7 @@
     buf->mingrow = mingrow;
     buf->allocated = FALSE;
 
-    if ((buf->data = dmMalloc(initial)) == NULL)
+    if ((buf->data = dmMalloc0(initial)) == NULL)
         return DMERR_MALLOC;
 
     return DMERR_OK;
@@ -74,11 +74,15 @@
 
 BOOL dmGrowBufGrow(DMGrowBuf *buf, const size_t amount)
 {
-    if (buf->data == NULL || buf->len + amount > buf->size)
+    size_t grow = (amount > buf->mingrow) ? amount : buf->mingrow;
+    if (buf->data == NULL || buf->len + grow > buf->size)
     {
-        buf->size += amount + (buf->mingrow > 0 ? buf->mingrow : 1024);
+        size_t prev = buf->size;
+        buf->size += grow;
         if ((buf->data = dmRealloc(buf->data, buf->size)) == NULL)
             return FALSE;
+
+        memset(buf->data + prev, 0, buf->size - prev);
     }
 
     return TRUE;
@@ -89,9 +93,12 @@
 {
     if (buf->data == NULL || nsize > buf->size)
     {
-        buf->size = nsize + (buf->mingrow > 0 ? buf->mingrow : 1024);
+        size_t prev = buf->size;
+        buf->size = nsize + buf->mingrow;
         if ((buf->data = dmRealloc(buf->data, buf->size)) == NULL)
             return FALSE;
+
+        memset(buf->data + prev, 0, buf->size - prev);
     }
 
     return TRUE;