From 306e52fef5e89dc441f1d3671141dd8fdbfd584f Mon Sep 17 00:00:00 2001 From: ornse01 Date: Sun, 8 Jan 2012 07:04:13 +0000 Subject: [PATCH] fix state mistake in chunked decoder. git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchanf/trunk@328 20a0b8eb-f62a-4a12-8fe1-b598822500fb --- src/http/http_transferdecoder.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/http/http_transferdecoder.c b/src/http/http_transferdecoder.c index 2cc9aa1..6c57676 100644 --- a/src/http/http_transferdecoder.c +++ b/src/http/http_transferdecoder.c @@ -234,6 +234,7 @@ LOCAL W http_transferdecoderchunked_inputentitybody(http_transferdecoderchunked_ START, READING_DATA, READING_OTHER, + CHUNK_END, } state = START; HTTP_CHUNKEDBODYPARSER_RESULT result_parser; @@ -266,6 +267,7 @@ LOCAL W http_transferdecoderchunked_inputentitybody(http_transferdecoderchunked_ break; } } else if (result_parser == HTTP_CHUNKEDBODYPARSER_RESULT_END) { + state = CHUNK_END; decoder->result[i_result].len = data + i_data - decoder->result[i_result].data; i_result++; decoder->result[i_result].type = HTTP_TRANSFERDECODER_RESULTTYPE_END; @@ -278,6 +280,7 @@ LOCAL W http_transferdecoderchunked_inputentitybody(http_transferdecoderchunked_ decoder->result[i_result].type = HTTP_TRANSFERDECODER_RESULTTYPE_DATA; decoder->result[i_result].data = data + i_data; } else if (result_parser == HTTP_CHUNKEDBODYPARSER_RESULT_END) { + state = CHUNK_END; decoder->result[i_result].type = HTTP_TRANSFERDECODER_RESULTTYPE_END; i_result++; break; @@ -285,6 +288,17 @@ LOCAL W http_transferdecoderchunked_inputentitybody(http_transferdecoderchunked_ } } + switch (state) { + case READING_DATA: + decoder->result[i_result].len = data + i_data - decoder->result[i_result].data; + i_result++; + break; + case START: + case READING_OTHER: + case CHUNK_END: + break; + }; + *result = decoder->result; *result_len = i_result; -- 2.11.0