]> git.cameronkatri.com Git - mandoc.git/commitdiff
Sane behaviour for the growing of very small buffers:
authorIngo Schwarze <schwarze@openbsd.org>
Tue, 21 Dec 2010 01:22:03 +0000 (01:22 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Tue, 21 Dec 2010 01:22:03 +0000 (01:22 +0000)
Always grow at least to the minimum requested size.
Before this, a buffer of 1 byte was grown to 2 bytes,
which was too small and sometimes caused segfaults.
ok kristaps@

main.c

diff --git a/main.c b/main.c
index 79a252e96d35803e4de703b4ad3fca5b981c2d3e..59f8fc69452574cf586d8c2ff1286b95e558a4f8 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/*     $Id: main.c,v 1.123 2010/12/15 23:39:40 kristaps Exp $ */
+/*     $Id: main.c,v 1.124 2010/12/21 01:22:03 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -389,7 +389,7 @@ static void
 resize_buf(struct buf *buf, size_t initial)
 {
 
-       buf->sz = buf->sz ? 2 * buf->sz : initial;
+       buf->sz = buf->sz > initial/2 ? 2 * buf->sz : initial;
        buf->buf = realloc(buf->buf, buf->sz);
        if (NULL == buf->buf) {
                perror(NULL);