From e3d0baa84699dc0fe589fc36e53d09132a0b5925 Mon Sep 17 00:00:00 2001 From: Paul LeoNerd Evans Date: Mon, 26 Aug 2013 18:46:01 +0100 Subject: Bugfix to snprint_cameltospaces() when given a short buffer [thanks Romain Chossart] --- termkey.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'termkey.c') diff --git a/termkey.c b/termkey.c index 20527a3..4239c66 100644 --- a/termkey.c +++ b/termkey.c @@ -198,19 +198,26 @@ static int snprint_cameltospaces(char *str, size_t size, const char *src) { int prev_lower = 0; size_t l = 0; - while(*src && l < size) { + while(*src && l < size - 1) { if(isupper(*src) && prev_lower) { if(str) str[l++] = ' '; - if(l >= size) - return -1; + if(l >= size - 1) + break; } prev_lower = islower(*src); str[l++] = tolower(*src++); } - if(l >= size) - return -1; str[l] = 0; + /* For consistency with snprintf, return the number of bytes that would have + * been written, excluding '\0' */ + while(*src) { + if(isupper(*src) && prev_lower) { + l++; + } + prev_lower = islower(*src); + src++; l++; + } return l; } -- cgit v1.2.3