Do not eat ESC character if control string is not properly terminated.
Currently tputc handles the case of too long control string waiting for the 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.
This commit is contained in:
		
				
					committed by
					
						 Roberto E. Vargas Caballero
						Roberto E. Vargas Caballero
					
				
			
			
				
	
			
			
			
						parent
						
							c4b79b055d
						
					
				
				
					commit
					02d2df5790
				
			
							
								
								
									
										8
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								st.c
									
									
									
									
									
								
							| @@ -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(); | ||||
| @@ -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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user