diff --git a/src/base/common.c b/src/base/common.c index 3026d0fd205f2e8285445a2a2a0cd8a18d189ca5..3225f6c49be0b38c5a8706b39f2804165d95dff7 100644 --- a/src/base/common.c +++ b/src/base/common.c @@ -76,10 +76,19 @@ __lkt_log(enum log_level level, const char *section, const char *func, const cha if (level > __log_level) return; - safe_snprintf(line, LKT_MESSAGE_MAX, " %c [%02d:%02d:%02d] %-10s %s(%s+%ld): %s\n", - level == ERROR ? '!' : level == WARN ? '*' : level == INFO ? '.' : ' ', - hour, min, sec, - section, func, file, line_number, format); + char c_level = level == ERROR ? '!' : level == WARN ? '*' : level == INFO ? '.' : ' '; + ssize_t count = safe_snprintf(line, LKT_MESSAGE_MAX, + " %c [%02d:%02d:%02d] %-10s %s(%s+%ld): %s\n", + c_level, hour, min, sec, section, func, file, + line_number, format); + /* Check for overflow */ + if (count >= LKT_MESSAGE_MAX - 1) { + line[LKT_MESSAGE_MAX - 1] = '\0'; + line[LKT_MESSAGE_MAX - 2] = '\n'; + line[LKT_MESSAGE_MAX - 3] = '.'; + line[LKT_MESSAGE_MAX - 4] = '.'; + line[LKT_MESSAGE_MAX - 5] = '.'; + } va_start(ap, format); vfprintf(stderr, line, ap);