Skip to content

Commit

Permalink
avoid assertion failure in error case
Browse files Browse the repository at this point in the history
Without this change, it is possible to get an assertion to fail by
continuing to call http_parser_execute after it has returned an error.
Specifically, the parser could be called with parser->state ==
s_chunk_size_almost_done and parser->flags & F_CHUNKED set.  Then,
F_CHUNKED could have been cleared, and an error could be hit.  In this
case, the parser would have returned with F_CHUNKED clear, but
parser->state == s_chunk_size_almost_done, resulting in an assertion
failure on the next call.

There are alternate solutions possible, including just saving all of
the fields (state included) on error.

I didn't add a test case because this is a bit annoying to test, but I
can add one if necesssary.
  • Loading branch information
Cliff Frey authored and ry committed Sep 12, 2010
1 parent cbb194e commit 459507f
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions http_parser.c
Expand Up @@ -1545,6 +1545,7 @@ size_t http_parser_execute (http_parser *parser,
return len;

error:
parser->state = s_dead;
return (p - data);
}

Expand Down

0 comments on commit 459507f

Please sign in to comment.