tFix crash due to wide characters - st - [fork] customized build of st, the sim… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 4d14d97547d335974e98aa612ac5b4fcfc25e1d9 | |
parent 708b697ed77e1ba4e96399ed6cb0f73a37565321 | |
Author: Rian Hunter <[email protected]> | |
Date: Thu, 29 Jan 2015 15:06:43 -0800 | |
Fix crash due to wide characters | |
In tputc(), when a character wasn't large enough to fit | |
on the current line, we would call tnewline() to place it on | |
tthe next line. Unfortunately, we weren't resetting our glyph | |
pointer and this caused memory corruption when a | |
wide character (width == 2) was being written. This patch | |
resets our glyph pointer after calls to tnewline(). | |
Diffstat: | |
M st.c | 5 ++++- | |
1 file changed, 4 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -2673,13 +2673,16 @@ tputc(char *c, int len) { | |
if(IS_SET(MODE_WRAP) && (term.c.state & CURSOR_WRAPNEXT)) { | |
gp->mode |= ATTR_WRAP; | |
tnewline(1); | |
+ gp = &term.line[term.c.y][term.c.x]; | |
} | |
if(IS_SET(MODE_INSERT) && term.c.x+1 < term.col) | |
memmove(gp+1, gp, (term.col - term.c.x - 1) * sizeof(Glyph)); | |
- if(term.c.x+width > term.col) | |
+ if(term.c.x+width > term.col) { | |
tnewline(1); | |
+ gp = &term.line[term.c.y][term.c.x]; | |
+ } | |
tsetchar(c, &term.c.attr, term.c.x, term.c.y); | |