Browse code

Check for too long haystack

Fixes #145

John Hawthorn authored on 09/08/2020 02:42:58
Showing 2 changed files

... ...
@@ -56,7 +56,7 @@ static void setup_match_struct(struct match_struct *match, const char *needle, c
56 56
 	match->needle_len = strlen(needle);
57 57
 	match->haystack_len = strlen(haystack);
58 58
 
59
-	if (match->needle_len > MATCH_MAX_LEN || match->needle_len > match->haystack_len) {
59
+	if (match->haystack_len > MATCH_MAX_LEN || match->needle_len > match->haystack_len) {
60 60
 		return;
61 61
 	}
62 62
 
... ...
@@ -131,6 +131,18 @@ TEST score_dot() {
131 131
 	PASS();
132 132
 }
133 133
 
134
+TEST score_long_string() {
135
+	char string[4096];
136
+	memset(string, 'a', sizeof(string) - 1);
137
+	string[sizeof(string) - 1] = '\0';
138
+
139
+	ASSERT_SCORE_EQ(SCORE_MIN, match("aa", string));
140
+	ASSERT_SCORE_EQ(SCORE_MIN, match(string, "aa"));
141
+	ASSERT_SCORE_EQ(SCORE_MIN, match(string, string));
142
+
143
+	PASS();
144
+}
145
+
134 146
 TEST positions_consecutive() {
135 147
 	size_t positions[3];
136 148
 	match_positions("amo", "app/models/foo", positions);
... ...
@@ -210,6 +222,7 @@ SUITE(match_suite) {
210 222
 	RUN_TEST(score_slash);
211 223
 	RUN_TEST(score_capital);
212 224
 	RUN_TEST(score_dot);
225
+	RUN_TEST(score_long_string);
213 226
 
214 227
 	RUN_TEST(positions_consecutive);
215 228
 	RUN_TEST(positions_start_of_word);