From 824d34e5b7f5cf00bf472ec79f7ec1c6e3474114 Mon Sep 17 00:00:00 2001 From: Jason Evans Date: Tue, 13 Mar 2012 13:19:04 -0700 Subject: [PATCH] Modify malloc_vsnprintf() validation code. Modify malloc_vsnprintf() validation code to verify that output is identical to vsnprintf() output, even if both outputs are truncated due to buffer exhaustion. --- include/jemalloc/internal/util.h | 6 ++++++ src/util.c | 7 +++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/jemalloc/internal/util.h b/include/jemalloc/internal/util.h index a268109c..c5f7520c 100644 --- a/include/jemalloc/internal/util.h +++ b/include/jemalloc/internal/util.h @@ -4,6 +4,12 @@ /* Size of stack-allocated buffer passed to buferror(). */ #define BUFERROR_BUF 64 +/* + * Size of static buffer used by malloc_[v]{,c,t}printf(). This must be large + * enough for all possible uses within jemalloc. + */ +#define MALLOC_PRINTF_BUFSIZE 4096 + /* * Define a custom assert() in order to reduce the chances of deadlock during * assertion failure. diff --git a/src/util.c b/src/util.c index 7d658aaa..47e7b66e 100644 --- a/src/util.c +++ b/src/util.c @@ -433,7 +433,7 @@ malloc_vsnprintf(char *str, size_t size, const char *format, va_list ap) ret = i; if (config_debug) { - char buf[ret + 2]; + char buf[MALLOC_PRINTF_BUFSIZE]; int tret; /* @@ -442,7 +442,7 @@ malloc_vsnprintf(char *str, size_t size, const char *format, va_list ap) */ tret = vsnprintf(buf, sizeof(buf), format, tap); assert(tret == ret); - assert(memcmp(str, buf, ret + 1) == 0); + assert(strcmp(buf, str) == 0); } #undef APPEND_C @@ -469,8 +469,7 @@ malloc_snprintf(char *str, size_t size, const char *format, ...) const char * malloc_vtprintf(const char *format, va_list ap) { - /* buf must be large enough for all possible uses within jemalloc. */ - static __thread char buf[4096]; + static __thread char buf[MALLOC_PRINTF_BUFSIZE]; malloc_vsnprintf(buf, sizeof(buf), format, ap);