From e42c74e14168af6803f3d674069ba823aa54f2dd Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Fri, 4 Feb 2011 16:00:08 -0800 Subject: [PATCH] Upgrade http-parser --- deps/http_parser/http_parser.c | 17 ++++++++++++++--- deps/http_parser/test.c | 10 +++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/deps/http_parser/http_parser.c b/deps/http_parser/http_parser.c index 5a0972a7df..9c5640f6d4 100644 --- a/deps/http_parser/http_parser.c +++ b/deps/http_parser/http_parser.c @@ -331,10 +331,20 @@ size_t http_parser_execute (http_parser *parser, uint64_t nread = parser->nread; if (len == 0) { - if (state == s_body_identity_eof) { - CALLBACK2(message_complete); + switch (state) { + case s_body_identity_eof: + CALLBACK2(message_complete); + return 0; + + case s_dead: + case s_start_req_or_res: + case s_start_res: + case s_start_req: + return 0; + + default: + return 1; // error } - return 0; } /* technically we could combine all of these (except for url_mark) into one @@ -1384,6 +1394,7 @@ size_t http_parser_execute (http_parser *parser, break; default: + parser->state = state; return p - data; /* Error */ } } diff --git a/deps/http_parser/test.c b/deps/http_parser/test.c index e5699aab98..2d1d8bd5da 100644 --- a/deps/http_parser/test.c +++ b/deps/http_parser/test.c @@ -1735,14 +1735,22 @@ main (void) /// REQUESTS - test_simple("hello world", 0); test_simple("GET / HTP/1.1\r\n\r\n", 0); + test_simple("ASDF / HTTP/1.1\r\n\r\n", 0); test_simple("PROPPATCHA / HTTP/1.1\r\n\r\n", 0); test_simple("GETA / HTTP/1.1\r\n\r\n", 0); + // Well-formed but incomplete + test_simple("GET / HTTP/1.1\r\n" + "Content-Type: text/plain\r\n" + "Content-Length: 6\r\n" + "\r\n" + "fooba", + 0); + static const char *all_methods[] = { "DELETE", "GET",