mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
syslog: Fix large messages (BZ#29536)
The a583b6add4
change did not handle large messages that
would require a heap allocation correctly, where the message itself
is not take in consideration.
This patch fixes it and extend the tst-syslog to check for large
messages as well.
Checked on x86_64-linux-gnu.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
This commit is contained in:
@@ -193,28 +193,32 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap,
|
||||
int vl = __vsnprintf_internal (bufs + l, sizeof bufs - l, fmt, apc,
|
||||
mode_flags);
|
||||
if (0 <= vl && vl < sizeof bufs - l)
|
||||
{
|
||||
buf = bufs;
|
||||
bufsize = l + vl;
|
||||
}
|
||||
buf = bufs;
|
||||
bufsize = l + vl;
|
||||
|
||||
va_end (apc);
|
||||
}
|
||||
|
||||
if (buf == NULL)
|
||||
{
|
||||
buf = malloc (l * sizeof (char));
|
||||
buf = malloc ((bufsize + 1) * sizeof (char));
|
||||
if (buf != NULL)
|
||||
{
|
||||
/* Tell the cancellation handler to free this buffer. */
|
||||
clarg.buf = buf;
|
||||
|
||||
if (has_ts)
|
||||
__snprintf (bufs, sizeof bufs,
|
||||
__snprintf (buf, l + 1,
|
||||
SYSLOG_HEADER (pri, timestamp, &msgoff, pid));
|
||||
else
|
||||
__snprintf (bufs, sizeof bufs,
|
||||
__snprintf (buf, l + 1,
|
||||
SYSLOG_HEADER_WITHOUT_TS (pri, &msgoff));
|
||||
|
||||
va_list apc;
|
||||
va_copy (apc, ap);
|
||||
__vsnprintf_internal (buf + l, bufsize - l + 1, fmt, apc,
|
||||
mode_flags);
|
||||
va_end (apc);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user