=== modified file 't/11strfkey.c' --- t/11strfkey.c 2013-08-26 17:46:01 +0000 +++ t/11strfkey.c 2013-08-26 00:32:35 +0000 @@ -8,7 +8,7 @@ char buffer[16]; size_t len; - plan_tests(44); + plan_tests(40); tk = termkey_new_abstract("vt100", 0); @@ -106,15 +106,6 @@ is_int(len, 7, "length for sym/PageUp/0 lowerspace"); is_str(buffer, "page up", "buffer for sym/PageUp/0 lowerspace"); - /* If size of buffer is too small, strfkey should return something consistent */ - len = termkey_strfkey(tk, buffer, 4, &key, 0); - is_int(len, 6, "length for sym/PageUp/0"); - is_str(buffer, "Pag", "buffer of len 4 for sym/PageUp/0"); - - len = termkey_strfkey(tk, buffer, 4, &key, TERMKEY_FORMAT_LOWERSPACE); - is_int(len, 7, "length for sym/PageUp/0 lowerspace"); - is_str(buffer, "pag", "buffer of len 4 for sym/PageUp/0 lowerspace"); - key.type = TERMKEY_TYPE_FUNCTION; key.code.number = 5; key.modifiers = 0; === modified file 'termkey.c' --- termkey.c 2013-08-26 17:46:01 +0000 +++ termkey.c 2013-08-26 01:35:40 +0000 @@ -198,26 +198,19 @@ { int prev_lower = 0; size_t l = 0; - while(*src && l < size - 1) { + while(*src && l < size) { if(isupper(*src) && prev_lower) { if(str) str[l++] = ' '; - if(l >= size - 1) - break; + if(l >= size) + return -1; } 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; }