aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiltjo Posthuma <hiltjo@codemadness.org>2020-05-09 13:56:28 +0200
committerHiltjo Posthuma <hiltjo@codemadness.org>2020-05-09 14:07:52 +0200
commit8211e36d281990a39db1853bcd454ac59e53d521 (patch)
treed912f2c0c9e4cea67b42a5aab8674d343ce42c3c
parent87545c612e8ab6e7cd1ef38e2355d0cb86df79f2 (diff)
downloadst-patched-8211e36d281990a39db1853bcd454ac59e53d521.tar.bz2
st-patched-8211e36d281990a39db1853bcd454ac59e53d521.tar.xz
st-patched-8211e36d281990a39db1853bcd454ac59e53d521.zip
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 11625c7166b7e4dad414606227acec2de1c36464 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.
-rw-r--r--st.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/st.c b/st.c
index c161497..5d4054f 100644
--- a/st.c
+++ b/st.c
@@ -2312,10 +2312,8 @@ tputc(Rune u)
2312 width = len = 1; 2312 width = len = 1;
2313 } else { 2313 } else {
2314 len = utf8encode(u, c); 2314 len = utf8encode(u, c);
2315 if (!control && (width = wcwidth(u)) == -1) { 2315 if (!control && (width = wcwidth(u)) == -1)
2316 memcpy(c, "\357\277\275", 4); /* UTF_INVALID */
2317 width = 1; 2316 width = 1;
2318 }
2319 } 2317 }
2320 2318
2321 if (IS_SET(MODE_PRINT)) 2319 if (IS_SET(MODE_PRINT))