From 68544a519ea2d73bbbd03ca8fc0abcd6798e3cd3 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Fri, 30 Dec 2011 01:25:50 +0100 Subject: [PATCH] Handle vsnprintf overflows (Thanks Han) --- src/log.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/log.c b/src/log.c index 05a235fa..14819e9e 100644 --- a/src/log.c +++ b/src/log.c @@ -194,9 +194,15 @@ static void vlog(const bool print, const char *fmt, va_list args) { vprintf(fmt, args); } else { len += vsnprintf(message + len, sizeof(message) - len, fmt, args); - if (len == sizeof(message)) { + if (len < 0 ) { + fprintf(stderr, "BUG: something is overflowing here. Dropping the log entry\n"); + return; + } + + if (len >= sizeof(message)) { fprintf(stderr, "BUG: single log message > 4k\n"); } + /* If there is no space for the current message (plus trailing * nullbyte) in the ringbuffer, we need to wrap and write to the * beginning again. */