Permalink
Browse files

avoid assertion failure in error case

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 11, 2010
1 parent cbb194e commit 459507f534c807d8ba741730fbc36d4b93b133c1
Showing with 1 addition and 0 deletions.
  1. +1 −0 http_parser.c
View
@@ -1545,6 +1545,7 @@ size_t http_parser_execute (http_parser *parser,
return len;
error:
+ parser->state = s_dead;
return (p - data);
}

0 comments on commit 459507f

Please sign in to comment.