fix for incorrect (partial) written sequences when libc wcwidth() == -1
Fix an issue with incorrect (partial) written sequences when libc wcwidth() ==
-1. The sequence is updated to on wcwidth(u) == -1:
c = "\357\277\275"
but len isn't.
A way to reproduce in practise:
* st -o dump.txt
* In the terminal: printf '\xcd\xb8'
- This is codepoint 888, on OpenBSD it reports wcwidth() == -1.
- Quit the terminal.
- Look in dump.txt (partial written sequence of "UTF_INVALID").
This was introduced in:
" commit 11625c7166
Author: czarkoff@gmail.com <czarkoff@gmail.com>
Date: Tue Oct 28 12:55:28 2014 +0100
Replace character with U+FFFD if wcwidth() is -1
Helpful when new Unicode codepoints are not recognized by libc."
Change:
Remove setting the sequence. If this happens to break something, another
solution could be setting len = 3 for the sequence.
master
parent
87545c612e
commit
8211e36d28
4
st.c
4
st.c
|
@ -2312,11 +2312,9 @@ tputc(Rune u)
|
||||||
width = len = 1;
|
width = len = 1;
|
||||||
} else {
|
} else {
|
||||||
len = utf8encode(u, c);
|
len = utf8encode(u, c);
|
||||||
if (!control && (width = wcwidth(u)) == -1) {
|
if (!control && (width = wcwidth(u)) == -1)
|
||||||
memcpy(c, "\357\277\275", 4); /* UTF_INVALID */
|
|
||||||
width = 1;
|
width = 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_SET(MODE_PRINT))
|
if (IS_SET(MODE_PRINT))
|
||||||
tprinter(c, len);
|
tprinter(c, len);
|
||||||
|
|
Reference in New Issue