From: Todd C. Miller Date: Tue, 2 Sep 2014 20:36:05 +0000 (-0600) Subject: Use a stack buffer for the debug message when possible, most are small. X-Git-Tag: SUDO_1_8_11^2~28 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4fa58d6974609e222c91f324d1a9a7ac57acca28;p=sudo Use a stack buffer for the debug message when possible, most are small. --- diff --git a/lib/util/sudo_debug.c b/lib/util/sudo_debug.c index b60980247..6ea5994ec 100644 --- a/lib/util/sudo_debug.c +++ b/lib/util/sudo_debug.c @@ -430,7 +430,7 @@ sudo_debug_vprintf2(const char *func, const char *file, int lineno, int level, const char *fmt, va_list ap) { int buflen, pri, subsys, saved_errno = errno; - char *buf = NULL; + char static_buf[1024], *buf = static_buf; if (!sudo_debug_mode) return; @@ -441,14 +441,19 @@ sudo_debug_vprintf2(const char *func, const char *file, int lineno, int level, /* Make sure we want debug info at this level. */ if (subsys < num_subsystems && sudo_debug_settings[subsys] >= pri) { - buflen = fmt ? vasprintf(&buf, fmt, ap) : 0; + buflen = fmt ? vsnprintf(static_buf, sizeof(static_buf), fmt, ap) : 0; + if (buflen >= (int)sizeof(static_buf)) { + /* Not enough room in static buf, allocate dynamically. */ + buflen = vasprintf(&buf, fmt, ap); + } if (buflen != -1) { int errcode = ISSET(level, SUDO_DEBUG_ERRNO) ? saved_errno : 0; if (ISSET(level, SUDO_DEBUG_LINENO)) sudo_debug_write2(func, file, lineno, buf, buflen, errcode); else sudo_debug_write2(NULL, NULL, 0, buf, buflen, errcode); - free(buf); + if (buf != static_buf) + free(buf); } }