From b8a102d26f41e57b94359627a4df8f22af10c6fa Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 2 Mar 2016 15:36:02 +0000 Subject: 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@. --- input.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'input.c') diff --git a/input.c b/input.c index ae205024..18c8eb9a 100644 --- a/input.c +++ b/input.c @@ -1960,8 +1960,14 @@ input_utf8_close(struct input_ctx *ictx) { struct utf8_data *ud = &ictx->utf8data; - if (utf8_append(ud, ictx->ch) != UTF8_DONE) - fatalx("UTF-8 close invalid %#x", ictx->ch); + if (utf8_append(ud, ictx->ch) != UTF8_DONE) { + /* + * An error here could be invalid UTF-8 or it could be a + * nonprintable character for which we can't get the + * width. Drop it. + */ + return (0); + } log_debug("%s %hhu '%*s' (width %hhu)", __func__, ud->size, (int)ud->size, ud->data, ud->width); -- cgit