Commit 46faedff authored by Maria Matejka's avatar Maria Matejka Committed by Maria Matejka
Browse files

Debug: growing message format buffer

This led in corner cases to undefined buffer content
and garbage output.
parent 9d23aa7a
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -242,14 +242,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);