fortify扫描提示vsnprintf函数的format参数可能存在溢出,该怎么修复
我的代码如下
static void Log(const char * logentry, ...)
{
char logbuffer[MAX_LEN];
va_list argsPtr;
char sanitized_fmt[MAX_LEN];
const char *src = logentry;
char *dst = sanitized_fmt;
int fmt_len = 0;
while (*src != '\0' && fmt_len < MAX_LEN - 1) {
if (*src == '%') {
if (*(src+1) == 's' || *(src+1) == 'd' ||
*(src+1) == 'f' || *(src+1) == 'c' ||
*(src+1) == 'u' || *(src+1) == '%') {
*dst++ = *src++;
*dst++ = *src++;
fmt_len += 2;
}
else {
*dst++ = '%';
*dst++ = 's';
src += (*(src+1) ? 2 : 1);
fmt_len += 2;
}
}
else {
*dst++ = *src++;
fmt_len++;
}
}
*dst = '\0';
va_start(argsPtr, logentry);
vsnprintf(logbuffer, MAX_LEN, sanitized_fmt, argsPtr);
va_end(argsPtr);
openlog("portmonitor", LOG_PID, SYSLOG_FACILITY);
syslog(SYSLOG_LEVEL, "%s", logbuffer);
closelog();
}
我已经对logentry进行了处理,但是fortify扫描时仍旧发出告警,vsnprintf() format string buffer overflow 我到底该怎么修改可以让这个不再告警呢