diff options
-rw-r--r-- | src/template.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/template.c b/src/template.c index 0529c62..7aa3a75 100644 --- a/src/template.c +++ b/src/template.c @@ -1,5 +1,6 @@ #include <stdio.h> #include <stdlib.h> +#include <err.h> #include "vendor/mpc.h" #include "template.h" @@ -26,9 +27,16 @@ struct buffer { }; void buffer_reserve(struct buffer *buf, int l) { - if (buf->size + l >= buf->cap) { - buf->cap *= 2; - buf->string = realloc(buf->string, buf->size + l); + int req_size = buf->size + l; + if (req_size >= buf->cap) { + while (req_size >= buf->cap) { + buf->cap *= 2; + } + + buf->string = realloc(buf->string, buf->cap * sizeof *buf->string); + if (!buf->string) { + err(EXIT_FAILURE, "out of memory"); + } } } |