diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2014-04-26 18:04:43 +0200 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2014-04-26 18:04:43 +0200 |
commit | c7f86efb13815554d5b5e7c58bf19769e99c1357 (patch) | |
tree | 9e39d6083a013a675aa4434c31012d04286e3baf | |
parent | 4f9d54146d569fffb679386fd3057e571afacd1f (diff) | |
download | libgit2-c7f86efb13815554d5b5e7c58bf19769e99c1357.tar.gz |
zstream: grow based on used memory rather than allocated
When deflating data, we might need to grow the buffer. Currently we
add a guess on top of the currently-allocated buffer size.
When we re-use the buffer, it already has some memory allocated; adding
to that means that we always grow the buffer regardless of how much we
need to use.
Instead, increase on top of the currently-used size. This still leaves
us with the allocated size of the largest object we compress, but it's a
minor pain compared to unbounded growth.
This fixes #2285.
-rw-r--r-- | src/zstream.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/zstream.c b/src/zstream.c index 85fa2e0e6..e75fb265e 100644 --- a/src/zstream.c +++ b/src/zstream.c @@ -134,7 +134,7 @@ int git_zstream_deflatebuf(git_buf *out, const void *in, size_t in_len) while (!git_zstream_done(&zs)) { size_t step = git_zstream_suggest_output_len(&zs), written; - if ((error = git_buf_grow(out, out->asize + step)) < 0) + if ((error = git_buf_grow(out, out->size + step)) < 0) goto done; written = out->asize - out->size; |