[dev] [st] [PATCH] Fix techo handling of control and multibyte characters.

From: noname <noname_AT_inventati.org>
Date: Wed, 23 Apr 2014 00:26:07 +0400

techo compares signed char to '\x20'. Any character with code less then
'\x20' is treated as control character. This way characters with MSB
set to 1 are considered control characters too.

Also this patch makes techo display DEL character as ^?.

To reprocuce the bug, enable echo mode using printf '\e[12l',
then type DEL character or any non-ASCII character.
---
 st.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/st.c b/st.c
index 019f53c..b6cb01c 100644
--- a/st.c
+++ b/st.c
_AT_@ -2316,9 +2316,9 @@ techo(char *buf, int len) {
 	for(; len > 0; buf++, len--) {
 		char c = *buf;
 
-		if(c < '\x20') { /* control code */
+		if(c < 0x20u || c == 0177) { /* control code */
 			if(c != '\n' && c != '\r' && c != '\t') {
-				c |= '\x40';
+				c ^= '\x40';
 				tputc("^", 1);
 			}
 			tputc(&c, 1);
-- 
1.8.4
Received on Tue Apr 22 2014 - 22:26:07 CEST

This archive was generated by hypermail 2.3.0 : Tue Apr 22 2014 - 22:36:06 CEST