Browse code

Fix possible overflow on long search string

John Hawthorn authored on 04/08/2014 05:05:37
Showing 1 changed files

  • fzy.c index ae07202..ad294bb 100644
... ...
@@ -84,8 +84,9 @@ void run_search(char *needle){
84 84
 
85 85
 #define NUMLINES 10
86 86
 
87
+#define SEARCH_SIZE_MAX 4096
87 88
 int search_size;
88
-char search[4096] = {0};
89
+char search[SEARCH_SIZE_MAX + 1] = {0};
89 90
 
90 91
 void clear(tty_t *tty){
91 92
 	fprintf(tty->fout, "%c%c0G", 0x1b, '[');
... ...
@@ -156,10 +157,11 @@ void run(tty_t *tty){
156 157
 		draw(tty);
157 158
 		ch = tty_getchar(tty);
158 159
 		if(isprint(ch)){
159
-			/* FIXME: overflow */
160
-			search[search_size++] = ch;
161
-			search[search_size] = '\0';
162
-			run_search(search);
160
+			if(search_size < SEARCH_SIZE_MAX){
161
+				search[search_size++] = ch;
162
+				search[search_size] = '\0';
163
+				run_search(search);
164
+			}
163 165
 		}else if(ch == 127 || ch == 8){ /* DEL || backspace */
164 166
 			if(search_size)
165 167
 				search[--search_size] = '\0';