--- a/src/server/test/httpparser.c Fri Feb 06 14:06:04 2026 +0100 +++ b/src/server/test/httpparser.c Fri Feb 06 14:16:09 2026 +0100 @@ -99,6 +99,14 @@ parser.start_line = cx_mutstr("GET /uri HTTP/1.1 test\r\n"); int nret6 = parse_request_line(&parser); CX_TEST_ASSERT(nret6); + + parser.start_line = cx_mutstr(" /uri2 HTTP/1.1\r\n"); + int nret7 = parse_request_line(&parser); + CX_TEST_ASSERT(nret7); + + parser.start_line = cx_mutstr("GET HTTP/1.1\r\n"); + int nret8 = parse_request_line(&parser); + CX_TEST_ASSERT(nret8); } } @@ -132,5 +140,42 @@ CX_TEST_ASSERT(!cx_strcmp(parser.httpv, "HTTP/0.9")); CX_TEST_ASSERT(!cx_strcmp(parser.msg, "No Content")); CX_TEST_ASSERT(parser.status == 204); + + // negative tests + memset(&parser, 0, sizeof(HttpParser)); + parser.start_line = cx_mutstr("HTTP/1.1 200\r\n"); + parser.type = 1; + int nret1 = parse_response_line(&parser); + CX_TEST_ASSERT(nret1); + + memset(&parser, 0, sizeof(HttpParser)); + parser.start_line = cx_mutstr("\r\n"); + parser.type = 1; + int nret2 = parse_response_line(&parser); + CX_TEST_ASSERT(nret2); + + memset(&parser, 0, sizeof(HttpParser)); + parser.start_line = cx_mutstr("200\r\n"); + parser.type = 1; + int nret3 = parse_response_line(&parser); + CX_TEST_ASSERT(nret3); + + memset(&parser, 0, sizeof(HttpParser)); + parser.start_line = cx_mutstr("HTTP/1.1 2345 Test Message\r\n"); + parser.type = 1; + int nret4 = parse_response_line(&parser); + CX_TEST_ASSERT(nret4); + + memset(&parser, 0, sizeof(HttpParser)); + parser.start_line = cx_mutstr("HTTP/1.1 xy1 OK\r\n"); + parser.type = 1; + int nret5 = parse_response_line(&parser); + CX_TEST_ASSERT(nret5); + + memset(&parser, 0, sizeof(HttpParser)); + parser.start_line = cx_mutstr(" 200 OK\r\n"); + parser.type = 1; + int nret6 = parse_response_line(&parser); + CX_TEST_ASSERT(nret6); } }