]> git.sur5r.net Git - i3/i3/commitdiff
Handle vsnprintf overflows (Thanks Han)
authorMichael Stapelberg <michael@stapelberg.de>
Fri, 30 Dec 2011 00:25:50 +0000 (01:25 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 30 Dec 2011 00:26:36 +0000 (01:26 +0100)
src/log.c

index 05a235fabf59f3ab53b7a119bc242e17f53fab16..14819e9e13d646f63f80f4c19430d0484a712300 100644 (file)
--- 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. */