tDo not eat ESC character if control string is not properly terminated. - st - … | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 02d2df5790d186f16e0e22becd8107a85f328c2f | |
parent c4b79b055df9ef0126f05dd6dbd2bbf935dcb980 | |
Author: noname <[email protected]> | |
Date: Sat, 26 Apr 2014 00:12:41 +0200 | |
Do not eat ESC character if control string is not properly terminated. | |
Currently tputc handles the case of too long control string waiting for | |
tthe end of control string. | |
Another case is when there is ESC character is encountered but is not | |
followed by '\\'. In this case st stops processing control string, | |
but ESC character is ignored. | |
After this patch st processes ESC characters in control strings properly. | |
Test case: | |
printf '\e]0;abc\e[1mBOLD\e[0m' | |
Also ^[\ is actually processed in the code that handles ST. | |
According to ECMA-048 ST stands for STRING TERMINATOR and is used to | |
close control strings. | |
Diffstat: | |
M st.c | 8 +++----- | |
1 file changed, 3 insertions(+), 5 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -2452,10 +2452,6 @@ tputc(char *c, int len) { | |
csiparse(); | |
csihandle(); | |
} | |
- } else if(term.esc & ESC_STR_END) { | |
- term.esc = 0; | |
- if(ascii == '\\') | |
- strhandle(); | |
} else if(term.esc & ESC_ALTCHARSET) { | |
tdeftran(ascii); | |
tselcs(); | |
t@@ -2545,7 +2541,9 @@ tputc(char *c, int len) { | |
tcursor(CURSOR_LOAD); | |
term.esc = 0; | |
break; | |
- case '\\': /* ST -- Stop */ | |
+ case '\\': /* ST -- String Terminator */ | |
+ if(term.esc & ESC_STR_END) | |
+ strhandle(); | |
term.esc = 0; | |
break; | |
default: |