Put the fix back for wcwidth() failing.

pull/2270/head
Nicholas Marriott 2020-05-26 08:49:36 +01:00
parent 967e5f8be3
commit d73fcfc176
1 changed files with 18 additions and 5 deletions

23
utf8.c
View File

@ -244,12 +244,25 @@ utf8_width(struct utf8_data *ud, int *width)
return (UTF8_ERROR);
}
*width = wcwidth(wc);
if (*width < 0 || *width > 0xff) {
log_debug("UTF-8 %.*s, wcwidth() %d", (int)ud->size, ud->data,
*width);
return (UTF8_ERROR);
if (*width >= 0 && *width <= 0xff)
return (UTF8_DONE);
log_debug("UTF-8 %.*s, wcwidth() %d", (int)ud->size, ud->data, *width);
#ifndef __OpenBSD__
/*
* Many platforms (particularly and inevitably OS X) have no width for
* relatively common characters (wcwidth() returns -1); assume width 1
* in this case. This will be wrong for genuinely nonprintable
* characters, but they should be rare. We may pass through stuff that
* ideally we would block, but this is no worse than sending the same
* to the terminal without tmux.
*/
if (*width < 0) {
*width = 1;
return (UTF8_DONE);
}
return (UTF8_DONE);
#endif
return (UTF8_ERROR);
}
/*