Avoid buffer overrun in kpress() and remove limit on shortcut strings.
This commit is contained in:
		
							parent
							
								
									02ae3ce6fd
								
							
						
					
					
						commit
						939e149544
					
				
							
								
								
									
										13
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								st.c
									
									
									
									
									
								
							| @ -264,7 +264,7 @@ typedef struct { | ||||
| typedef struct { | ||||
| 	KeySym k; | ||||
| 	uint mask; | ||||
| 	char s[ESC_BUF_SIZ]; | ||||
| 	char *s; | ||||
| 	/* three valued logic variables: 0 indifferent, 1 on, -1 off */ | ||||
| 	signed char appkey;    /* application keypad */ | ||||
| 	signed char appcursor; /* application cursor */ | ||||
| @ -3585,12 +3585,15 @@ kpress(XEvent *ev) { | ||||
| 	/* 2. custom keys from config.h */ | ||||
| 	if((customkey = kmap(ksym, e->state))) { | ||||
| 		len = strlen(customkey); | ||||
| 		memcpy(buf, customkey, len); | ||||
| 		ttywrite(customkey, len); | ||||
| 		if(IS_SET(MODE_ECHO)) | ||||
| 			techo(customkey, len); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	/* 3. composed string from input method */ | ||||
| 	} else { | ||||
| 	if(len == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	if(len == 1 && e->state & Mod1Mask) { | ||||
| 		if(IS_SET(MODE_8BIT)) { | ||||
| 			if(*buf < 0177) { | ||||
| @ -3603,8 +3606,6 @@ kpress(XEvent *ev) { | ||||
| 			len = 2; | ||||
| 		} | ||||
| 	} | ||||
| 	} | ||||
| 
 | ||||
| 	ttywrite(buf, len); | ||||
| 	if(IS_SET(MODE_ECHO)) | ||||
| 		techo(buf, len); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Mark Edgar
						Mark Edgar