Further request method check strengthening.

v0.10
Ben Noordhuis 11 years ago
parent ddfa1b3ee3
commit 303c4e46c4

@ -936,6 +936,7 @@ size_t http_parser_execute (http_parser *parser,
} else if (parser->index == 2 && ch == 'P') { } else if (parser->index == 2 && ch == 'P') {
parser->method = HTTP_COPY; parser->method = HTTP_COPY;
} else { } else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error; goto error;
} }
} else if (parser->method == HTTP_MKCOL) { } else if (parser->method == HTTP_MKCOL) {
@ -948,6 +949,7 @@ size_t http_parser_execute (http_parser *parser,
} else if (parser->index == 2 && ch == 'A') { } else if (parser->index == 2 && ch == 'A') {
parser->method = HTTP_MKACTIVITY; parser->method = HTTP_MKACTIVITY;
} else { } else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error; goto error;
} }
} else if (parser->method == HTTP_SUBSCRIBE) { } else if (parser->method == HTTP_SUBSCRIBE) {

@ -3117,16 +3117,7 @@ main (void)
/// REQUESTS /// REQUESTS
test_simple("hello world", HPE_INVALID_METHOD);
test_simple("GET / HTP/1.1\r\n\r\n", HPE_INVALID_VERSION); test_simple("GET / HTP/1.1\r\n\r\n", HPE_INVALID_VERSION);
test_simple("GEM / HTTP/1.1\r\n\r\n", HPE_INVALID_METHOD);
test_simple("PUN / HTTP/1.1\r\n\r\n", HPE_INVALID_METHOD);
test_simple("PX / HTTP/1.1\r\n\r\n", HPE_INVALID_METHOD);
test_simple("SA / HTTP/1.1\r\n\r\n", HPE_INVALID_METHOD);
test_simple("ASDF / HTTP/1.1\r\n\r\n", HPE_INVALID_METHOD);
test_simple("PROPPATCHA / HTTP/1.1\r\n\r\n", HPE_INVALID_METHOD);
test_simple("GETA / HTTP/1.1\r\n\r\n", HPE_INVALID_METHOD);
// Well-formed but incomplete // Well-formed but incomplete
test_simple("GET / HTTP/1.1\r\n" test_simple("GET / HTTP/1.1\r\n"
@ -3170,13 +3161,23 @@ main (void)
} }
static const char *bad_methods[] = { static const char *bad_methods[] = {
"ASDF",
"C******", "C******",
"COLA",
"GEM",
"GETA",
"M****", "M****",
"MKCOLA",
"PROPPATCHA",
"PUN",
"PX",
"SA",
"hello world",
0 }; 0 };
for (this_method = bad_methods; *this_method; this_method++) { for (this_method = bad_methods; *this_method; this_method++) {
char buf[200]; char buf[200];
sprintf(buf, "%s / HTTP/1.1\r\n\r\n", *this_method); sprintf(buf, "%s / HTTP/1.1\r\n\r\n", *this_method);
test_simple(buf, HPE_UNKNOWN); test_simple(buf, HPE_INVALID_METHOD);
} }
const char *dumbfuck2 = const char *dumbfuck2 =

Loading…
Cancel
Save