diff options
| author | Hiltjo Posthuma <hiltjo@codemadness.org> | 2020-05-09 13:56:28 +0200 |
|---|---|---|
| committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2020-05-09 14:07:52 +0200 |
| commit | 8211e36d281990a39db1853bcd454ac59e53d521 (patch) | |
| tree | d912f2c0c9e4cea67b42a5aab8674d343ce42c3c | |
| parent | tiny code-style and typo-fix in comment (diff) | |
| download | st-8211e36d281990a39db1853bcd454ac59e53d521.tar.gz st-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.c | 4 |
1 files changed, 1 insertions, 3 deletions
| @@ -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)) |
