Do not accept PUN/GEM methods as PUT/GET.

* Encountering them returns an error, `HPE_INVALID_METHOD`
* Tests have been added.
make-http-max-header-size-gyp-configurable
Chris Dickinson 11 years ago committed by Ben Noordhuis
parent d3264312e1
commit c6ee6ada69

@ -947,6 +947,7 @@ size_t http_parser_execute (http_parser *parser,
if (parser->index == 1 && ch == 'E') {
parser->method = HTTP_SEARCH;
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
} else if (parser->index == 1 && parser->method == HTTP_POST) {
@ -957,13 +958,27 @@ size_t http_parser_execute (http_parser *parser,
} else if (ch == 'A') {
parser->method = HTTP_PATCH;
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
} else if (parser->index == 2) {
if (parser->method == HTTP_PUT) {
if (ch == 'R') parser->method = HTTP_PURGE;
if (ch == 'R') {
parser->method = HTTP_PURGE;
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
} else if (parser->method == HTTP_UNLOCK) {
if (ch == 'S') parser->method = HTTP_UNSUBSCRIBE;
if (ch == 'S') {
parser->method = HTTP_UNSUBSCRIBE;
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
} else {
SET_ERRNO(HPE_INVALID_METHOD);
goto error;
}
} else if (parser->index == 4 && parser->method == HTTP_PROPFIND && ch == 'P') {
parser->method = HTTP_PROPPATCH;

@ -3275,7 +3275,10 @@ main (void)
test_simple("hello world", HPE_INVALID_METHOD);
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);

Loading…
Cancel
Save