mirror of
https://github.com/irssi/irssi.git
synced 2026-08-19 00:22:17 +02:00
Fix oob read on invalid utf8 in term_addstr
This commit is contained in:
parent
1c6695107c
commit
8007e9e61d
1 changed files with 10 additions and 3 deletions
|
|
@ -539,9 +539,16 @@ int term_addstr(TERM_WINDOW *window, const char *str)
|
||||||
|
|
||||||
if (term_type == TERM_TYPE_UTF8) {
|
if (term_type == TERM_TYPE_UTF8) {
|
||||||
while (*ptr != '\0') {
|
while (*ptr != '\0') {
|
||||||
tmp = g_utf8_get_char(ptr);
|
tmp = g_utf8_get_char_validated(ptr, -1);
|
||||||
len += unichar_isprint(tmp) ? mk_wcwidth(tmp) : 1;
|
/* On utf8 error, treat as single byte and try to
|
||||||
ptr = g_utf8_next_char(ptr);
|
continue interpretting rest of string as utf8 */
|
||||||
|
if (tmp == (gunichar)-1 || tmp == (gunichar)-2) {
|
||||||
|
len++;
|
||||||
|
ptr++;
|
||||||
|
} else {
|
||||||
|
len += unichar_isprint(tmp) ? mk_wcwidth(tmp) : 1;
|
||||||
|
ptr = g_utf8_next_char(ptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
len = raw_len;
|
len = raw_len;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue