Using strtol with overflow checking.
This commit is contained in:
		
							
								
								
									
										18
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								st.c
									
									
									
									
									
								
							| @@ -1296,17 +1296,22 @@ tnewline(int first_col) { | |||||||
| void | void | ||||||
| csiparse(void) { | csiparse(void) { | ||||||
| 	/* int noarg = 1; */ | 	/* int noarg = 1; */ | ||||||
| 	char *p = csiescseq.buf; | 	char *p = csiescseq.buf, *np; | ||||||
|  | 	long int v; | ||||||
|  |  | ||||||
| 	csiescseq.narg = 0; | 	csiescseq.narg = 0; | ||||||
| 	if(*p == '?') | 	if(*p == '?') | ||||||
| 		csiescseq.priv = 1, p++; | 		csiescseq.priv = 1, p++; | ||||||
|  |  | ||||||
| 	while(p < csiescseq.buf+csiescseq.len) { | 	while(p < csiescseq.buf+csiescseq.len) { | ||||||
| 		while(isdigit(*p)) { | 		np = NULL; | ||||||
| 			csiescseq.arg[csiescseq.narg] *= 10; | 		v = strtol(p, &np, 10); | ||||||
| 			csiescseq.arg[csiescseq.narg] += *p++ - '0'/*, noarg = 0 */; | 		if(v == LONG_MAX || v == LONG_MIN) | ||||||
| 		} | 			v = -1; | ||||||
|  | 		csiescseq.arg[csiescseq.narg] = v; | ||||||
|  | 		if(np != NULL) | ||||||
|  | 			p = np; | ||||||
|  |  | ||||||
| 		if(*p == ';' && csiescseq.narg+1 < ESC_ARG_SIZ) { | 		if(*p == ';' && csiescseq.narg+1 < ESC_ARG_SIZ) { | ||||||
| 			csiescseq.narg++, p++; | 			csiescseq.narg++, p++; | ||||||
| 		} else { | 		} else { | ||||||
| @@ -2116,7 +2121,8 @@ tputc(char *c, int len) { | |||||||
| 			if(BETWEEN(ascii, 0x40, 0x7E) | 			if(BETWEEN(ascii, 0x40, 0x7E) | ||||||
| 					|| csiescseq.len >= ESC_BUF_SIZ) { | 					|| csiescseq.len >= ESC_BUF_SIZ) { | ||||||
| 				term.esc = 0; | 				term.esc = 0; | ||||||
| 				csiparse(), csihandle(); | 				csiparse(); | ||||||
|  | 				csihandle(); | ||||||
| 			} | 			} | ||||||
| 		} else if(term.esc & ESC_STR_END) { | 		} else if(term.esc & ESC_STR_END) { | ||||||
| 			term.esc = 0; | 			term.esc = 0; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user