Browse Source

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
Hiltjo Posthuma 4 years ago
parent
commit
8211e36d28
1 changed files with 1 additions and 3 deletions
  1. +1
    -3
      st.c

+ 1
- 3
st.c View File

@ -2312,10 +2312,8 @@ 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) {
memcpy(c, "\357\277\275", 4); /* UTF_INVALID */
if (!control && (width = wcwidth(u)) == -1)
width = 1; width = 1;
}
} }
if (IS_SET(MODE_PRINT)) if (IS_SET(MODE_PRINT))


Loading…
Cancel
Save