Debug: growing message format buffer

This led in corner cases to undefined buffer content
and garbage output.
This commit is contained in:
Maria Matejka 2019-07-10 11:12:41 +02:00
parent deb84d7989
commit 422a933429

View file

@ -309,14 +309,23 @@ die(const char *msg, ...)
void
debug(const char *msg, ...)
{
#define MAX_DEBUG_BUFSIZE 65536
va_list args;
char buf[1024];
static uint bufsize = 4096;
static char *buf = NULL;
if (!buf)
buf = mb_alloc(&root_pool, bufsize);
va_start(args, msg);
if (dbgf)
{
if (bvsnprintf(buf, sizeof(buf), msg, args) < 0)
bsprintf(buf + sizeof(buf) - 100, " ... <too long>\n");
while (bvsnprintf(buf, bufsize, msg, args) < 0)
if (bufsize >= MAX_DEBUG_BUFSIZE)
bug("Extremely long debug output, split it.");
else
buf = mb_realloc(buf, (bufsize *= 2));
fputs(buf, dbgf);
}
va_end(args);