Fix multiple begin message cbs when response starts with CR/LF

PR-URL: https://github.com/nodejs/http-parser/pull/432
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Jon Moss <me@jonathanmoss.me>
make-http-max-header-size-gyp-configurable
Matt Klein 6 years ago committed by Jon Moss
parent 5b76466c6b
commit 25de6ed8e4

@ -758,21 +758,16 @@ reexecute:
case s_start_res: case s_start_res:
{ {
if (ch == CR || ch == LF)
break;
parser->flags = 0; parser->flags = 0;
parser->content_length = ULLONG_MAX; parser->content_length = ULLONG_MAX;
switch (ch) { if (ch == 'H') {
case 'H': UPDATE_STATE(s_res_H);
UPDATE_STATE(s_res_H); } else {
break; SET_ERRNO(HPE_INVALID_CONSTANT);
goto error;
case CR:
case LF:
break;
default:
SET_ERRNO(HPE_INVALID_CONSTANT);
goto error;
} }
CALLBACK_NOTIFY(message_begin); CALLBACK_NOTIFY(message_begin);

@ -2094,6 +2094,7 @@ int
message_begin_cb (http_parser *p) message_begin_cb (http_parser *p)
{ {
assert(p == &parser); assert(p == &parser);
assert(!messages[num_messages].message_begin_cb_called);
messages[num_messages].message_begin_cb_called = TRUE; messages[num_messages].message_begin_cb_called = TRUE;
return 0; return 0;
} }
@ -4189,6 +4190,7 @@ main (void)
test_simple_type("HTTP/11.1 200 OK\r\n\r\n", HPE_INVALID_VERSION, HTTP_RESPONSE); test_simple_type("HTTP/11.1 200 OK\r\n\r\n", HPE_INVALID_VERSION, HTTP_RESPONSE);
test_simple_type("HTTP/1.01 200 OK\r\n\r\n", HPE_INVALID_VERSION, HTTP_RESPONSE); test_simple_type("HTTP/1.01 200 OK\r\n\r\n", HPE_INVALID_VERSION, HTTP_RESPONSE);
test_simple_type("HTTP/1.1\t200 OK\r\n\r\n", HPE_INVALID_VERSION, HTTP_RESPONSE); test_simple_type("HTTP/1.1\t200 OK\r\n\r\n", HPE_INVALID_VERSION, HTTP_RESPONSE);
test_simple_type("\rHTTP/1.1\t200 OK\r\n\r\n", HPE_INVALID_VERSION, HTTP_RESPONSE);
for (i = 0; i < ARRAY_SIZE(responses); i++) { for (i = 0; i < ARRAY_SIZE(responses); i++) {
test_message(&responses[i]); test_message(&responses[i]);

Loading…
Cancel
Save