# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit 4d14d97547d335974e98aa612ac5b4fcfc25e1d9
    parent 708b697ed77e1ba4e96399ed6cb0f73a37565321
    Author: Rian Hunter <rian+suckless-dev@thelig.ht>
    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
    the 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:
    Mst.c | 5++++-

    1 file changed, 4 insertions(+), 1 deletion(-)
    diff --git a/st.c b/st.c
    @@ -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);