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().
This commit is contained in:
		
							parent
							
								
									708b697ed7
								
							
						
					
					
						commit
						4d14d97547
					
				
							
								
								
									
										5
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								st.c
									
									
									
									
									
								
							| @ -2673,13 +2673,16 @@ tputc(char *c, int len) { | |||||||
| 	if(IS_SET(MODE_WRAP) && (term.c.state & CURSOR_WRAPNEXT)) { | 	if(IS_SET(MODE_WRAP) && (term.c.state & CURSOR_WRAPNEXT)) { | ||||||
| 		gp->mode |= ATTR_WRAP; | 		gp->mode |= ATTR_WRAP; | ||||||
| 		tnewline(1); | 		tnewline(1); | ||||||
|  | 		gp = &term.line[term.c.y][term.c.x]; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if(IS_SET(MODE_INSERT) && term.c.x+1 < term.col) | 	if(IS_SET(MODE_INSERT) && term.c.x+1 < term.col) | ||||||
| 		memmove(gp+1, gp, (term.col - term.c.x - 1) * sizeof(Glyph)); | 		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); | 		tnewline(1); | ||||||
|  | 		gp = &term.line[term.c.y][term.c.x]; | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	tsetchar(c, &term.c.attr, term.c.x, term.c.y); | 	tsetchar(c, &term.c.attr, term.c.x, term.c.y); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Rian Hunter
						Rian Hunter