check for utf8_decode errors (#327)
utf8_decode() may return an errors, in which case the returned codepoint might be garbage. the issue can be tested by adding the following to `image-info` which produces invalid utf8 sequences: base64 -d << EOF 9JCAgPSQgIH0kICC9JCAg/SQgIT0kICF9JCAhvSQgIf0kICI9JCAifSQgIr0kICL9JCAjPSQgI30 kICO9JCAj/SQgJD0kICR9JCAkvSQgJP0kICU9JCAlfSQgJb0kICX9JCAmPSQgJn0kICa9JCAm/SQ gJz0kICd9JCAnvSQgJ8= EOF on my system, this leads to the statusbar being filled with empty boxes. check for returned error and skip the iteration. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/327 Reviewed-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
This commit is contained in:
parent
7c59cc7edc
commit
51d4c8dd4f
9
window.c
9
window.c
@ -407,7 +407,7 @@ void win_clear(win_t *win)
|
||||
static int win_draw_text(win_t *win, XftDraw *d, const XftColor *color,
|
||||
int x, int y, char *text, int len, int w)
|
||||
{
|
||||
int err, tw = 0;
|
||||
int err, tw = 0, warned = 0;
|
||||
char *t, *next;
|
||||
uint32_t rune;
|
||||
XftFont *f;
|
||||
@ -415,7 +415,14 @@ static int win_draw_text(win_t *win, XftDraw *d, const XftColor *color,
|
||||
XGlyphInfo ext;
|
||||
|
||||
for (t = text; t - text < len; t = next) {
|
||||
err = 0;
|
||||
next = utf8_decode(t, &rune, &err);
|
||||
if (err) {
|
||||
if (!warned)
|
||||
error(0, 0, "error decoding utf8 status-bar text");
|
||||
warned = 1;
|
||||
continue;
|
||||
}
|
||||
if (XftCharExists(win->env.dpy, font, rune)) {
|
||||
f = font;
|
||||
} else { /* fallback font */
|
||||
|
Loading…
Reference in New Issue
Block a user