From 4de6a1d81e59f8288df881d26fe1a75a3e35b5c4 Mon Sep 17 00:00:00 2001 From: Zeex Date: Wed, 7 Jan 2015 19:23:46 +0600 Subject: [PATCH] Fix invalid buffer length in logFormat() When the buffer passed to vsnprintf() is too small it actually returns length of the string, not how many characters have been written to the buffer (which is limited by the buffer size). So bound len by sizeof(buf) - 1 in logFormat(). --- src/asmjit/base/logger.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/asmjit/base/logger.cpp b/src/asmjit/base/logger.cpp index 3e64301..94e539f 100644 --- a/src/asmjit/base/logger.cpp +++ b/src/asmjit/base/logger.cpp @@ -45,9 +45,12 @@ void Logger::logFormat(uint32_t style, const char* fmt, ...) { va_list ap; va_start(ap, fmt); - len = vsnprintf(buf, 1023, fmt, ap); + len = vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); + if (len >= sizeof(buf)) + len = sizeof(buf) - 1; + logString(style, buf, len); }