Handle wcwidth() and mbtowc() failures in better style and drop

characters where we can't find the width (wcwidth() fails) on input, the
same as we drop invalid UTF-8. Suggested by schwarze@.
This commit is contained in:
nicm
2016-03-02 15:36:02 +00:00
parent d980d965dd
commit b8a102d26f
5 changed files with 48 additions and 21 deletions

View File

@ -477,6 +477,7 @@ tty_keys_next(struct tty *tty)
struct utf8_data ud;
enum utf8_state more;
u_int i;
wchar_t wc;
/* Get key buffer. */
buf = EVBUFFER_DATA(tty->event->input);
@ -552,7 +553,11 @@ first_key:
more = utf8_append(&ud, (u_char)buf[i]);
if (more != UTF8_DONE)
goto discard_key;
key = utf8_combine(&ud);
if (utf8_combine(&ud, &wc) != UTF8_DONE)
goto discard_key;
key = wc;
log_debug("UTF-8 key %.*s %#llx", (int)size, buf, key);
goto complete_key;
}