|  | @@ -71,70 +71,70 @@ START_TEST(test_parse_http_message)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	char req11[] = "GET /\r\nError: X\r\n\r\n";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	int lenreq1 = (int)strlen(req1);
 | 
	
		
			
				|  |  | +	int lenreq2 = (int)strlen(req2);
 | 
	
		
			
				|  |  | +	int lenreq3 = (int)strlen(req3);
 | 
	
		
			
				|  |  | +	int lenreq4 = (int)strlen(req4);
 | 
	
		
			
				|  |  | +	int lenreq5 = (int)strlen(req5);
 | 
	
		
			
				|  |  | +	int lenreq6 = (int)strlen(req6);
 | 
	
		
			
				|  |  | +	int lenreq7 = (int)strlen(req7);
 | 
	
		
			
				|  |  | +	int lenreq8 = (int)strlen(req8);
 | 
	
		
			
				|  |  | +	int lenreq9 = (int)strlen(req9);
 | 
	
		
			
				|  |  | +	int lenreq10 = (int)strlen(req10);
 | 
	
		
			
				|  |  | +	int lenreq11 = (int)strlen(req11);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	ck_assert_int_eq(0, get_http_header_len(empty, 0));
 | 
	
		
			
				|  |  |  	ck_assert_int_eq(0, parse_http_request(empty, 0, &ri));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(0, get_http_header_len(req1, (int)strlen(req1) - 1));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req1),
 | 
	
		
			
				|  |  | -	                 get_http_header_len(req1, (int)strlen(req1)));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req1),
 | 
	
		
			
				|  |  | -	                 parse_http_request(req1, (int)strlen(req1), &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(0, get_http_header_len(req1, lenreq1 - 1));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq1, get_http_header_len(req1, lenreq1));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq1, parse_http_request(req1, lenreq1, &ri));
 | 
	
		
			
				|  |  |  	ck_assert_str_eq("1.1", ri.http_version);
 | 
	
		
			
				|  |  |  	ck_assert_int_eq(0, ri.num_headers);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req2),
 | 
	
		
			
				|  |  | -	                 get_http_header_len(req2, (int)strlen(req2)));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(-1, parse_http_request(req2, (int)strlen(req2), &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq2, get_http_header_len(req2, lenreq2));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(-1, parse_http_request(req2, lenreq2, &ri));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req3),
 | 
	
		
			
				|  |  | -	                 get_http_header_len(req3, (int)strlen(req3)));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(0, parse_http_request(req3, (int)strlen(req3), &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq3, get_http_header_len(req3, lenreq3));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(0, parse_http_request(req3, lenreq3, &ri));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Multiline header are obsolete, so return an error
 | 
	
		
			
				|  |  |  	 * (https://tools.ietf.org/html/rfc7230#section-3.2.4). */
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(-1, parse_http_request(req4, (int)strlen(req4), &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(-1, parse_http_request(req4, lenreq4, &ri));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req5),
 | 
	
		
			
				|  |  | -	                 get_http_header_len(req5, (int)strlen(req5)));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req5),
 | 
	
		
			
				|  |  | -	                 parse_http_request(req5, (int)strlen(req5), &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq5, get_http_header_len(req5, lenreq5));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq5, parse_http_request(req5, lenreq5, &ri));
 | 
	
		
			
				|  |  |  	ck_assert_str_eq("GET", ri.request_method);
 | 
	
		
			
				|  |  |  	ck_assert_str_eq("1.1", ri.http_version);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(0, get_http_header_len(req8, (int)strlen(req8)));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(0, parse_http_request(req6, (int)strlen(req6), &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(0, get_http_header_len(req8, lenreq8));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(0, parse_http_request(req6, lenreq6, &ri));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(0, get_http_header_len(req7, (int)strlen(req7)));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(0, parse_http_request(req7, (int)strlen(req7), &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(0, get_http_header_len(req7, lenreq7));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(0, parse_http_request(req7, lenreq7, &ri));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req8),
 | 
	
		
			
				|  |  | -	                 get_http_header_len(req8, (int)strlen(req8)));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(-1, parse_http_request(req8, (int)strlen(req8), &ri));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req8),
 | 
	
		
			
				|  |  | -	                 parse_http_response(req8, (int)strlen(req8), &respi));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq8, get_http_header_len(req8, lenreq8));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(-1, parse_http_request(req8, lenreq8, &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq8, parse_http_response(req8, lenreq8, &respi));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req9),
 | 
	
		
			
				|  |  | -	                 get_http_header_len(req9, (int)strlen(req9)));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(-1, parse_http_request(req9, (int)strlen(req9), &ri));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req9),
 | 
	
		
			
				|  |  | -	                 parse_http_response(req9, (int)strlen(req9), &respi));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq9, get_http_header_len(req9, lenreq9));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(-1, parse_http_request(req9, lenreq9, &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq9, parse_http_response(req9, lenreq9, &respi));
 | 
	
		
			
				|  |  |  	ck_assert_int_eq(1, respi.num_headers);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req10),
 | 
	
		
			
				|  |  | -	                 get_http_header_len(req10, (int)strlen(req10)));
 | 
	
		
			
				|  |  | -	ck_assert_int_eq((int)strlen(req10),
 | 
	
		
			
				|  |  | -	                 parse_http_request(req10, (int)strlen(req10), &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq10, get_http_header_len(req10, lenreq10));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(lenreq10, parse_http_request(req10, lenreq10, &ri));
 | 
	
		
			
				|  |  |  	ck_assert_str_eq("1.1", ri.http_version);
 | 
	
		
			
				|  |  |  	ck_assert_int_eq(2, ri.num_headers);
 | 
	
		
			
				|  |  |  	ck_assert_str_eq("A", ri.http_headers[0].name);
 | 
	
	
		
			
				|  | @@ -143,7 +143,7 @@ START_TEST(test_parse_http_message)
 | 
	
		
			
				|  |  |  	ck_assert_str_eq("bar", ri.http_headers[1].value);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(-1, parse_http_request(req11, (int)strlen(req11), &ri));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(-1, parse_http_request(req11, lenreq11, &ri));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  END_TEST
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -162,12 +162,16 @@ START_TEST(test_should_keep_alive)
 | 
	
		
			
				|  |  |  	char yes[] = "yes";
 | 
	
		
			
				|  |  |  	char no[] = "no";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	int lenreq1 = (int)strlen(req1);
 | 
	
		
			
				|  |  | +	int lenreq2 = (int)strlen(req2);
 | 
	
		
			
				|  |  | +	int lenreq3 = (int)strlen(req3);
 | 
	
		
			
				|  |  | +	int lenreq4 = (int)strlen(req4);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	memset(&conn, 0, sizeof(conn));
 | 
	
		
			
				|  |  |  	conn.ctx = &ctx;
 | 
	
		
			
				|  |  | -	ck_assert_int_eq(parse_http_request(req1,
 | 
	
		
			
				|  |  | -	                                    (int)strlen(req1),
 | 
	
		
			
				|  |  | -	                                    &conn.request_info),
 | 
	
		
			
				|  |  | -	                 (int)strlen(req1));
 | 
	
		
			
				|  |  | +	ck_assert_int_eq(parse_http_request(req1, lenreq1, &conn.request_info),
 | 
	
		
			
				|  |  | +	                 lenreq1);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	ctx.config[ENABLE_KEEP_ALIVE] = no;
 | 
	
		
			
				|  |  |  	ck_assert_int_eq(should_keep_alive(&conn), 0);
 | 
	
	
		
			
				|  | @@ -179,13 +183,13 @@ START_TEST(test_should_keep_alive)
 | 
	
		
			
				|  |  |  	ck_assert_int_eq(should_keep_alive(&conn), 0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	conn.must_close = 0;
 | 
	
		
			
				|  |  | -	parse_http_request(req2, (int)strlen(req2), &conn.request_info);
 | 
	
		
			
				|  |  | +	parse_http_request(req2, lenreq2, &conn.request_info);
 | 
	
		
			
				|  |  |  	ck_assert_int_eq(should_keep_alive(&conn), 0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	parse_http_request(req3, (int)strlen(req3), &conn.request_info);
 | 
	
		
			
				|  |  | +	parse_http_request(req3, lenreq3, &conn.request_info);
 | 
	
		
			
				|  |  |  	ck_assert_int_eq(should_keep_alive(&conn), 0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	parse_http_request(req4, (int)strlen(req4), &conn.request_info);
 | 
	
		
			
				|  |  | +	parse_http_request(req4, lenreq4, &conn.request_info);
 | 
	
		
			
				|  |  |  	ck_assert_int_eq(should_keep_alive(&conn), 1);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	conn.status_code = 401;
 |