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