diff options
author | Vicent Marti <tanoku@gmail.com> | 2011-06-06 01:54:59 +0200 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2011-06-06 01:54:59 +0200 |
commit | f9213015fddb8636daa993080cbbec70a02cba5c (patch) | |
tree | 2afd5f7b9b424fcbc0fa5815bf374618a114faa6 /src | |
parent | 2b397327e66e0e587e67df5a7803286db0f84ea0 (diff) | |
download | libgit2-f9213015fddb8636daa993080cbbec70a02cba5c.tar.gz |
filebuf: Fix printf buffer overflows
The filebuf was not being properly written after a flush. This should
cut it now.
Fixes #228
Diffstat (limited to 'src')
-rw-r--r-- | src/filebuf.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/filebuf.c b/src/filebuf.c index 97dec83f3..d0579b16b 100644 --- a/src/filebuf.c +++ b/src/filebuf.c @@ -363,14 +363,19 @@ int git_filebuf_printf(git_filebuf *file, const char *format, ...) int len, error; va_start(arglist, format); - len = vsnprintf((char *)file->buffer + file->buf_pos, space_left, format, arglist); + va_end(arglist); if (len < 0 || (size_t)len >= space_left) { if ((error = flush_buffer(file)) < GIT_SUCCESS) return git__rethrow(error, "Failed to output to buffer"); + space_left = file->buf_size - file->buf_pos; + + va_start(arglist, format); len = vsnprintf((char *)file->buffer + file->buf_pos, space_left, format, arglist); + va_end(arglist); + if (len < 0 || (size_t)len > file->buf_size) return GIT_ENOMEM; } |