logging module bug 6 fix

remotes/origin/master-1.0.x
Anoop Saldanha 17 years ago committed by Victor Julien
parent 6b36e23e45
commit a83f7abcc1

@ -265,7 +265,7 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
struct timeval tval; struct timeval tval;
struct tm *tms = NULL; struct tm *tms = NULL;
/* no of characters_written(cw) by sprintf */ /* no of characters_written(cw) by snprintf */
int cw = 0; int cw = 0;
if (temp_fmt == NULL) { if (temp_fmt == NULL) {
@ -293,6 +293,12 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
return SC_LOG_FG_FILTER_MATCH_FAILED; return SC_LOG_FG_FILTER_MATCH_FAILED;
while ( (temp_fmt = index(temp_fmt, SC_LOG_FMT_PREFIX)) ) { while ( (temp_fmt = index(temp_fmt, SC_LOG_FMT_PREFIX)) ) {
if ((temp - *msg) > SC_LOG_MAX_LOG_MSG_LEN) {
printf("Warning: Log message exceeded message length limit of %d\n",
SC_LOG_MAX_LOG_MSG_LEN);
*msg = *msg + SC_LOG_MAX_LOG_MSG_LEN;
return SC_OK;
}
switch(temp_fmt[1]) { switch(temp_fmt[1]) {
case SC_LOG_FMT_TIME: case SC_LOG_FMT_TIME:
temp_fmt[0] = '\0'; temp_fmt[0] = '\0';
@ -300,7 +306,7 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
gettimeofday(&tval, NULL); gettimeofday(&tval, NULL);
tms = localtime(&tval.tv_sec); tms = localtime(&tval.tv_sec);
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN, cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - *msg),
"%s%d/%d/%04d -- %02d:%02d:%02d", "%s%d/%d/%04d -- %02d:%02d:%02d",
substr, tms->tm_mday, tms->tm_mon + 1, substr, tms->tm_mday, tms->tm_mon + 1,
tms->tm_year + 1900, tms->tm_hour, tms->tm_min, tms->tm_year + 1900, tms->tm_hour, tms->tm_min,
@ -315,8 +321,8 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
case SC_LOG_FMT_PID: case SC_LOG_FMT_PID:
temp_fmt[0] = '\0'; temp_fmt[0] = '\0';
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN, "%s%u", substr, cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - *msg),
getpid()); "%s%u", substr, getpid());
if (cw < 0) if (cw < 0)
goto error; goto error;
temp += cw; temp += cw;
@ -327,8 +333,8 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
case SC_LOG_FMT_TID: case SC_LOG_FMT_TID:
temp_fmt[0] = '\0'; temp_fmt[0] = '\0';
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN, "%s%lu", substr, cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - *msg),
syscall(SYS_gettid)); "%s%lu", substr, syscall(SYS_gettid));
if (cw < 0) if (cw < 0)
goto error; goto error;
temp += cw; temp += cw;
@ -340,8 +346,8 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
case SC_LOG_FMT_TM: case SC_LOG_FMT_TM:
temp_fmt[0] = '\0'; temp_fmt[0] = '\0';
ThreadVars *tv = TmThreadsGetCallingThread(); ThreadVars *tv = TmThreadsGetCallingThread();
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN, "%s%s", substr, cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - *msg),
((tv != NULL)? tv->name: "UNKNOWN TM")); "%s%s", substr, ((tv != NULL)? tv->name: "UNKNOWN TM"));
if (cw < 0) if (cw < 0)
goto error; goto error;
temp += cw; temp += cw;
@ -354,11 +360,11 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
temp_fmt[0] = '\0'; temp_fmt[0] = '\0';
s = SCMapEnumValueToName(log_level, sc_log_level_map); s = SCMapEnumValueToName(log_level, sc_log_level_map);
if (s != NULL) if (s != NULL)
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN, "%s%s", substr, cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - *msg),
s); "%s%s", substr, s);
else else
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN, "%s%s", substr, cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - *msg),
"INVALID"); "%s%s", substr, "INVALID");
if (cw < 0) if (cw < 0)
goto error; goto error;
temp += cw; temp += cw;
@ -369,8 +375,8 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
case SC_LOG_FMT_FILE_NAME: case SC_LOG_FMT_FILE_NAME:
temp_fmt[0] = '\0'; temp_fmt[0] = '\0';
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN, "%s%s", substr, cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - *msg),
file); "%s%s", substr, file);
if (cw < 0) if (cw < 0)
goto error; goto error;
temp += cw; temp += cw;
@ -381,8 +387,8 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
case SC_LOG_FMT_LINE: case SC_LOG_FMT_LINE:
temp_fmt[0] = '\0'; temp_fmt[0] = '\0';
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN, "%s%d", substr, cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - *msg),
line); "%s%d", substr, line);
if (cw < 0) if (cw < 0)
goto error; goto error;
temp += cw; temp += cw;
@ -393,8 +399,8 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
case SC_LOG_FMT_FUNCTION: case SC_LOG_FMT_FUNCTION:
temp_fmt[0] = '\0'; temp_fmt[0] = '\0';
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN, "%s%s", substr, cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - *msg),
function); "%s%s", substr, function);
if (cw < 0) if (cw < 0)
goto error; goto error;
temp += cw; temp += cw;
@ -406,7 +412,7 @@ SCError SCLogMessage(SCLogLevel log_level, char **msg, const char *file,
} }
temp_fmt++; temp_fmt++;
} }
cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN, "%s", substr); cw = snprintf(temp, SC_LOG_MAX_LOG_MSG_LEN - (temp - *msg), "%s", substr);
if (cw < 0) if (cw < 0)
goto error; goto error;
@ -1402,6 +1408,16 @@ int SCLogTestInit04()
return result; return result;
} }
int SCLogTestInit05()
{
int result = 1;
SCLogInfo("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
return result;
}
#endif /* UNITTESTS */ #endif /* UNITTESTS */
void SCLogRegisterTests() void SCLogRegisterTests()
@ -1413,6 +1429,7 @@ void SCLogRegisterTests()
UtRegisterTest("SCLogTestInit02", SCLogTestInit02, 1); UtRegisterTest("SCLogTestInit02", SCLogTestInit02, 1);
UtRegisterTest("SCLogTestInit03", SCLogTestInit03, 1); UtRegisterTest("SCLogTestInit03", SCLogTestInit03, 1);
UtRegisterTest("SCLogTestInit04", SCLogTestInit04, 1); UtRegisterTest("SCLogTestInit04", SCLogTestInit04, 1);
UtRegisterTest("SCLogTestInit05", SCLogTestInit05, 1);
#endif /* UNITTESTS */ #endif /* UNITTESTS */

@ -206,6 +206,13 @@ extern int sc_log_module_cleaned;
"[ERRCODE: %s(%d)] - ", \ "[ERRCODE: %s(%d)] - ", \
SCErrorToString(err), \ SCErrorToString(err), \
err); \ err); \
if ((_sc_log_err_temp - _sc_log_err_msg) > \
SC_LOG_MAX_LOG_MSG_LEN) { \
printf("Warning: Log message exceeded message length limit of %d\n",\
SC_LOG_MAX_LOG_MSG_LEN); \
_sc_log_err_temp = _sc_log_err_msg + \
SC_LOG_MAX_LOG_MSG_LEN; \
} \
snprintf(_sc_log_err_temp, \ snprintf(_sc_log_err_temp, \
(SC_LOG_MAX_LOG_MSG_LEN - \ (SC_LOG_MAX_LOG_MSG_LEN - \
(_sc_log_err_msg - _sc_log_err_temp)), \ (_sc_log_err_msg - _sc_log_err_temp)), \

Loading…
Cancel
Save