Using strsep and fixing null termination in csiparse.
Thanks for the hint from Alexander Sedov <alex0player@gmail.com>!
This commit is contained in:
		| @ -19,7 +19,7 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lutil -lXext -lXft \ | |||||||
|        $(shell pkg-config --libs freetype2) |        $(shell pkg-config --libs freetype2) | ||||||
|  |  | ||||||
| # flags | # flags | ||||||
| CPPFLAGS = -DVERSION=\"${VERSION}\" | CPPFLAGS = -DVERSION=\"${VERSION}\" -D_BSD_SOURCE -D_XOPEN_SOURCE=600 | ||||||
| CFLAGS += -g -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} | CFLAGS += -g -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} | ||||||
| LDFLAGS += -g ${LIBS} | LDFLAGS += -g ${LIBS} | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										15
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								st.c
									
									
									
									
									
								
							| @ -1,5 +1,4 @@ | |||||||
| /* See LICENSE for licence details. */ | /* See LICENSE for licence details. */ | ||||||
| #define _XOPEN_SOURCE 600 |  | ||||||
| #include <ctype.h> | #include <ctype.h> | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| @ -1304,6 +1303,7 @@ csiparse(void) { | |||||||
| 		p++; | 		p++; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	csiescseq.buf[csiescseq.len] = '\0'; | ||||||
| 	while(p < csiescseq.buf+csiescseq.len) { | 	while(p < csiescseq.buf+csiescseq.len) { | ||||||
| 		np = NULL; | 		np = NULL; | ||||||
| 		v = strtol(p, &np, 10); | 		v = strtol(p, &np, 10); | ||||||
| @ -1925,14 +1925,12 @@ strhandle(void) { | |||||||
|  |  | ||||||
| void | void | ||||||
| strparse(void) { | strparse(void) { | ||||||
| 	char *p = strescseq.buf, *sp; | 	char *p = strescseq.buf; | ||||||
|  |  | ||||||
|  | 	strescseq.narg = 0; | ||||||
| 	strescseq.buf[strescseq.len] = '\0'; | 	strescseq.buf[strescseq.len] = '\0'; | ||||||
| 	for(p = strtok_r(p, ";", &sp); p; p = strtok_r(NULL, ";", &sp)) { | 	while(p && strescseq.narg < STR_ARG_SIZ) | ||||||
| 		if(strescseq.narg == STR_ARG_SIZ) | 		strescseq.args[strescseq.narg++] = strsep(&p, ";"); | ||||||
| 			return; |  | ||||||
| 		strescseq.args[strescseq.narg++] = p; |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| @ -2109,7 +2107,8 @@ tputc(char *c, int len) { | |||||||
| 		if(term.esc & ESC_CSI) { | 		if(term.esc & ESC_CSI) { | ||||||
| 			csiescseq.buf[csiescseq.len++] = ascii; | 			csiescseq.buf[csiescseq.len++] = ascii; | ||||||
| 			if(BETWEEN(ascii, 0x40, 0x7E) | 			if(BETWEEN(ascii, 0x40, 0x7E) | ||||||
| 					|| csiescseq.len >= ESC_BUF_SIZ) { | 					|| csiescseq.len >= \ | ||||||
|  | 					sizeof(csiescseq.buf)-1) { | ||||||
| 				term.esc = 0; | 				term.esc = 0; | ||||||
| 				csiparse(); | 				csiparse(); | ||||||
| 				csihandle(); | 				csihandle(); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user