From d40cbf0e2601b35bfb1c0551c6f3907b5c5178ff Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Mon, 27 Jul 2015 17:33:11 +0200 Subject: Fix commit e473b7c if an inline file happens to have a line break exactly at buffer limit The check does only for strlen(line) space and buf_printf will only use at most space -1 and not print the final character ('\n') in this corner. Since a missing \n only breaks certificates at the start and end marker, missing line breaks otherwise do not trigger this error. Acked-by: Steffan Karger Message-Id: <1438011191-19389-1-git-send-email-arne@rfc2549.org> URL: http://article.gmane.org/gmane.network.openvpn.devel/9956 Signed-off-by: Gert Doering --- src/openvpn/buffer.h | 5 ++++- src/openvpn/options.c | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/openvpn/buffer.h b/src/openvpn/buffer.h index 5695f64..0dc511b 100644 --- a/src/openvpn/buffer.h +++ b/src/openvpn/buffer.h @@ -329,7 +329,10 @@ has_digit (const unsigned char* src) } /* - * printf append to a buffer with overflow check + * printf append to a buffer with overflow check, + * due to usage of vsnprintf, it will leave space for + * a final null character and thus use only + * capacity - 1 */ bool buf_printf (struct buffer *buf, const char *format, ...) #ifdef __GNUC__ diff --git a/src/openvpn/options.c b/src/openvpn/options.c index 93baa2b..9eb8e76 100644 --- a/src/openvpn/options.c +++ b/src/openvpn/options.c @@ -3712,7 +3712,7 @@ read_inline_file (struct in_src *is, const char *close_tag, struct gc_arena *gc) endtagfound = true; break; } - if (!buf_safe (&buf, strlen(line))) + if (!buf_safe (&buf, strlen(line)+1)) { /* Increase buffer size */ struct buffer buf2 = alloc_buf (buf.capacity * 2); -- cgit