Make sure compatibility_program is initialized to 0.
[gedcom-parse.git] / gedcom / buffer.c
index 6f807b1dc0454083045e7e4be65c027e4e281e40..0c3e17ca8cc094ad4925f47924266faafe23bbca 100644 (file)
@@ -51,8 +51,8 @@ void init_buffer(struct safe_buffer *b)
   if (b && b->buffer == NULL) {
     b->buffer = (char *)malloc(INITIAL_BUF_SIZE);
     if (b->buffer) {
-      b->buffer[0] = '\0';
       b->bufsize = INITIAL_BUF_SIZE;
+      memset(b->buffer, 0, b->bufsize);
       b->buf_end = b->buffer;
       b->buflen  = 0;
       if (b->cleanup_func && atexit(b->cleanup_func) != 0) {
@@ -70,9 +70,17 @@ void init_buffer(struct safe_buffer *b)
 
 void grow_buffer(struct safe_buffer *b)
 {
+  char* new_buffer;
+  size_t old_size = b->bufsize;
   b->bufsize *= 2;
-  b->buffer = realloc(b->buffer, b->bufsize);
-  b->buf_end = b->buffer + b->buflen;
+  new_buffer = realloc(b->buffer, b->bufsize);
+  if (new_buffer) {
+    b->buffer = new_buffer;
+    memset(b->buffer + old_size, 0, b->bufsize - old_size);
+    b->buf_end = b->buffer + b->buflen;
+  }
+  else
+    b->buffer = NULL;
 }
 
 int safe_buf_vappend(struct safe_buffer *b, const char *s, va_list ap)