Hello,
under some circumstances the following small example prints lots of
garbage onto the console and into the syslog:
#include <syslog.h>
int main ()
{
openlog("foo", LOG_CONS|LOG_NDELAY|LOG_PID|LOG_PERROR, LOG_DAEMON);
syslog (LOG_WARNING, "mlock: %m");
return 1;
}
The reason is, that sprintf returns with -1 and vsyslog dumps the
complete buffer onto stderr and the syslogd socket. The following
patch would fix the problem:
memmove(head_end + sizeof(truncate_msg), head_end,
end - head_end - sizeof(truncate_msg));
memcpy(head_end, truncate_msg, sizeof(truncate_msg));
- p = end - 1;
+ if (p < head_end) {
+ while (p < end && *p) {
+ p++;
+ }
+ }
+ else {
+ p = end - 1;
+ }
+
}
last_chr = p;