diff options
author | nicm <nicm> | 2016-03-02 15:36:02 +0000 |
---|---|---|
committer | nicm <nicm> | 2016-03-02 15:36:02 +0000 |
commit | b8a102d26f41e57b94359627a4df8f22af10c6fa (patch) | |
tree | 43730f925370a2d77bf64e817cb77bfaf4849dc5 /key-string.c | |
parent | d980d965ddb6165bd801351892fed2497204a279 (diff) | |
download | rtmux-b8a102d26f41e57b94359627a4df8f22af10c6fa.tar.gz rtmux-b8a102d26f41e57b94359627a4df8f22af10c6fa.tar.bz2 rtmux-b8a102d26f41e57b94359627a4df8f22af10c6fa.zip |
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@.
Diffstat (limited to 'key-string.c')
-rw-r--r-- | key-string.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/key-string.c b/key-string.c index dc211696..c56681f1 100644 --- a/key-string.c +++ b/key-string.c @@ -149,6 +149,7 @@ key_string_lookup_string(const char *string) struct utf8_data ud; u_int i; enum utf8_state more; + wchar_t wc; /* Is this no key? */ if (strcasecmp(string, "None") == 0) @@ -185,8 +186,9 @@ key_string_lookup_string(const char *string) more = utf8_append(&ud, (u_char)string[i]); if (more != UTF8_DONE) return (KEYC_UNKNOWN); - key = utf8_combine(&ud); - return (key | modifiers); + if (utf8_combine(&ud, &wc) != UTF8_DONE) + return (KEYC_UNKNOWN); + return (wc | modifiers); } /* Otherwise look the key up in the table. */ |