From bda8d38b0ca0055253626c023a165b0f7040e0ff Mon Sep 17 00:00:00 2001 From: james Date: Sat, 19 Jul 2008 03:39:59 +0000 Subject: buf_printf will now return false on errors, such as truncation due to overflow. git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@3085 e7ae566f-a301-0410-adde-c780ea21d3b5 --- buffer.c | 9 +++++++-- buffer.h | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/buffer.c b/buffer.c index c90ff9f..498861e 100644 --- a/buffer.c +++ b/buffer.c @@ -182,9 +182,10 @@ buf_sub (struct buffer *buf, int size, bool prepend) /* * printf append to a buffer with overflow check */ -void +bool buf_printf (struct buffer *buf, const char *format, ...) { + int ret = false; if (buf_defined (buf)) { va_list arglist; @@ -193,13 +194,17 @@ buf_printf (struct buffer *buf, const char *format, ...) if (cap > 0) { + int stat; va_start (arglist, format); - vsnprintf ((char *)ptr, cap, format, arglist); + stat = vsnprintf ((char *)ptr, cap, format, arglist); va_end (arglist); *(buf->data + buf->capacity - 1) = 0; /* windows vsnprintf needs this */ buf->len += (int) strlen ((char *)ptr); + if (stat >= 0 && stat < cap) + ret = true; } } + return ret; } /* diff --git a/buffer.h b/buffer.h index 8888869..7de3363 100644 --- a/buffer.h +++ b/buffer.h @@ -206,7 +206,7 @@ has_digit (const unsigned char* src) /* * printf append to a buffer with overflow check */ -void buf_printf (struct buffer *buf, const char *format, ...) +bool buf_printf (struct buffer *buf, const char *format, ...) #ifdef __GNUC__ __attribute__ ((format (printf, 2, 3))) #endif -- cgit v1.2.3