X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gedcom%2Fbuffer.c;h=0c3e17ca8cc094ad4925f47924266faafe23bbca;hb=177218adadc7aa92a1c14e6b8b33080dc77d6e4e;hp=6f807b1dc0454083045e7e4be65c027e4e281e40;hpb=8d7d7a57b31433fad9bcfb2bb21cfa5cd1090679;p=gedcom-parse.git diff --git a/gedcom/buffer.c b/gedcom/buffer.c index 6f807b1..0c3e17c 100644 --- a/gedcom/buffer.c +++ b/gedcom/buffer.c @@ -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)