|  | @@ -323,33 +323,47 @@ START_TEST(test_match_prefix)
 | 
											
												
													
														|  |  END_TEST
 |  |  END_TEST
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -START_TEST(test_remove_double_dots_and_double_slashes)
 |  | 
 | 
											
												
													
														|  | 
 |  | +START_TEST(test_remove_dot_segments)
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  | -	/* Adapted from unit_test.c */
 |  | 
 | 
											
												
													
														|  | -	/* Copyright (c) 2013-2015 the Civetweb developers */
 |  | 
 | 
											
												
													
														|  | -	/* Copyright (c) 2004-2013 Sergey Lyubka */
 |  | 
 | 
											
												
													
														|  |  	struct {
 |  |  	struct {
 | 
											
												
													
														|  | -		char before[20], after[20];
 |  | 
 | 
											
												
													
														|  | -	} data[] = {
 |  | 
 | 
											
												
													
														|  | -	    {"////a", "/a"},
 |  | 
 | 
											
												
													
														|  | -	    {"/.....", "/."},
 |  | 
 | 
											
												
													
														|  | -	    {"/......", "/"},
 |  | 
 | 
											
												
													
														|  | -	    {"..", "."},
 |  | 
 | 
											
												
													
														|  | -	    {"...", "."},
 |  | 
 | 
											
												
													
														|  | -	    {"/...///", "/./"},
 |  | 
 | 
											
												
													
														|  | -	    {"/a...///", "/a.../"},
 |  | 
 | 
											
												
													
														|  | -	    {"/.x", "/.x"},
 |  | 
 | 
											
												
													
														|  | -	    {"/\\", "/"},
 |  | 
 | 
											
												
													
														|  | -	    {"/a\\", "/a\\"},
 |  | 
 | 
											
												
													
														|  | -	    {"/a\\\\...", "/a\\."},
 |  | 
 | 
											
												
													
														|  | 
 |  | +		const char *input;
 | 
											
												
													
														|  | 
 |  | +		const char *expected_output;
 | 
											
												
													
														|  | 
 |  | +	} tests[] = {{"/path/to/file.ext", "/path/to/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/file.ext", "/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/path/../file.ext", "/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/../to/file.ext", "/to/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/../../file.ext", "/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/./../file.ext", "/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/.././file.ext", "/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/././file.ext", "/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/././file.ext", "/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/path/.to/..file.ext", "/path/.to/..file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/file", "/file"},
 | 
											
												
													
														|  | 
 |  | +	             {"/path/", "/path/"},
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	             {"file.ext", "file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"./file.ext", "file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"../file.ext", "file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {".file.ext", ".file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"..file.ext", "..file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"file", "file"},
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	             /* Windows specific */
 | 
											
												
													
														|  | 
 |  | +	             {"\\file.ext", "/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"\\..\\file.ext", "/file.ext"},
 | 
											
												
													
														|  | 
 |  | +	             {"/file.", "/file"},
 | 
											
												
													
														|  | 
 |  | +	             {"/path\\to.\\.\\file.", "/path/to/file"},
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	             {NULL, NULL}
 | 
											
												
													
														|  |  	};
 |  |  	};
 | 
											
												
													
														|  | -	size_t i;
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	mark_point();
 |  |  	mark_point();
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	for (i = 0; i < ARRAY_SIZE(data); i++) {
 |  | 
 | 
											
												
													
														|  | -		remove_double_dots_and_double_slashes(data[i].before);
 |  | 
 | 
											
												
													
														|  | -		ck_assert_str_eq(data[i].before, data[i].after);
 |  | 
 | 
											
												
													
														|  | 
 |  | +	for (int i = 0; (tests[i].input != NULL); i++) {
 | 
											
												
													
														|  | 
 |  | +		char inout[256];
 | 
											
												
													
														|  | 
 |  | +		strcpy(inout, tests[i].input);
 | 
											
												
													
														|  | 
 |  | +		remove_dot_segments(inout);
 | 
											
												
													
														|  | 
 |  | +		ck_assert_str_eq(inout, tests[i].expected_output);
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  END_TEST
 |  |  END_TEST
 | 
											
										
											
												
													
														|  | @@ -1106,8 +1120,7 @@ make_private_suite(void)
 | 
											
												
													
														|  |  	tcase_set_timeout(tcase_url_parsing_1, civetweb_min_test_timeout);
 |  |  	tcase_set_timeout(tcase_url_parsing_1, civetweb_min_test_timeout);
 | 
											
												
													
														|  |  	suite_add_tcase(suite, tcase_url_parsing_1);
 |  |  	suite_add_tcase(suite, tcase_url_parsing_1);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	tcase_add_test(tcase_url_parsing_2,
 |  | 
 | 
											
												
													
														|  | -	               test_remove_double_dots_and_double_slashes);
 |  | 
 | 
											
												
													
														|  | 
 |  | +	tcase_add_test(tcase_url_parsing_2, test_remove_dot_segments);
 | 
											
												
													
														|  |  	tcase_set_timeout(tcase_url_parsing_2, civetweb_min_test_timeout);
 |  |  	tcase_set_timeout(tcase_url_parsing_2, civetweb_min_test_timeout);
 | 
											
												
													
														|  |  	suite_add_tcase(suite, tcase_url_parsing_2);
 |  |  	suite_add_tcase(suite, tcase_url_parsing_2);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -1178,7 +1191,7 @@ MAIN_PRIVATE(void)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	test_alloc_vprintf(0);
 |  |  	test_alloc_vprintf(0);
 | 
											
												
													
														|  |  	test_mg_vsnprintf(0);
 |  |  	test_mg_vsnprintf(0);
 | 
											
												
													
														|  | -	test_remove_double_dots_and_double_slashes(0);
 |  | 
 | 
											
												
													
														|  | 
 |  | +	test_remove_dot_segments(0);
 | 
											
												
													
														|  |  	test_parse_date_string(0);
 |  |  	test_parse_date_string(0);
 | 
											
												
													
														|  |  	test_parse_port_string(0);
 |  |  	test_parse_port_string(0);
 | 
											
												
													
														|  |  	test_parse_http_message(0);
 |  |  	test_parse_http_message(0);
 |