When we report an error to the client, we format it into a
fixed-size buffer using vsprintf(). This can't actually
overflow in practice, since we only format a very tame
subset of strings (mostly strerror() output). However, it's
hard to tell immediately, so let's just use a strbuf so
readers do not have to wonder.

We do add an allocation here, but the performance is not
important; the next step is to call die() anyway.

Signed-off-by: Jeff King <p...@peff.net>
---
 builtin/upload-archive.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/builtin/upload-archive.c b/builtin/upload-archive.c
index 32ab94c..dbfe14f 100644
--- a/builtin/upload-archive.c
+++ b/builtin/upload-archive.c
@@ -49,15 +49,14 @@ int cmd_upload_archive_writer(int argc, const char **argv, 
const char *prefix)
 __attribute__((format (printf, 1, 2)))
 static void error_clnt(const char *fmt, ...)
 {
-       char buf[1024];
+       struct strbuf buf = STRBUF_INIT;
        va_list params;
-       int len;
 
        va_start(params, fmt);
-       len = vsprintf(buf, fmt, params);
+       strbuf_vaddf(&buf, fmt, params);
        va_end(params);
-       send_sideband(1, 3, buf, len, LARGE_PACKET_MAX);
-       die("sent error to the client: %s", buf);
+       send_sideband(1, 3, buf.buf, buf.len, LARGE_PACKET_MAX);
+       die("sent error to the client: %s", buf.buf);
 }
 
 static ssize_t process_input(int child_fd, int band)
-- 
2.6.0.rc2.408.ga2926b9

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to