summaryrefslogtreecommitdiffstats
path: root/buf.c
diff options
context:
space:
mode:
Diffstat (limited to 'buf.c')
-rw-r--r--buf.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/buf.c b/buf.c
index b97bef41..b22ff2b2 100644
--- a/buf.c
+++ b/buf.c
@@ -143,12 +143,14 @@ static void buf_grow(struct buf *b, val init_val, val self)
cnum oldsize = c_num(b->size), size = oldsize;
cnum iv = c_u8(default_arg(init_val, zero), self);
- while (size < len) {
- cnum delta = size / 4;
- if (INT_PTR_MAX - delta >= size)
- size += delta;
- else
- size = len;
+ if (size < len) {
+ if (size > INT_PTR_MAX - INT_PTR_MAX / 5) {
+ size = INT_PTR_MAX;
+ } else {
+ size = size + size / 4;
+ if (size < len)
+ size = len;
+ }
}
if (size > oldsize) {