diff options
author | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2021-11-22 21:37:44 +0300 |
---|---|---|
committer | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2021-11-24 19:07:42 +0300 |
commit | 8a69a4492345c359ab804109d97efb7e292a2c7b (patch) | |
tree | a4c6322b6d90db7753cb69d4bab0282339683b78 | |
parent | eebf9c28f01fdcd970a9f9496487930fe9eb4cea (diff) | |
download | libmicrohttpd-8a69a4492345c359ab804109d97efb7e292a2c7b.tar.gz libmicrohttpd-8a69a4492345c359ab804109d97efb7e292a2c7b.zip |
process_request_body(): fixed: do not skip chunk closure when too few data available
-rw-r--r-- | src/microhttpd/connection.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c index 0426620b..e65fc0b0 100644 --- a/src/microhttpd/connection.c +++ b/src/microhttpd/connection.c | |||
@@ -3113,17 +3113,20 @@ process_request_body (struct MHD_Connection *connection) | |||
3113 | mhd_assert (MHD_SIZE_UNKNOWN == connection->remaining_upload_size); | 3113 | mhd_assert (MHD_SIZE_UNKNOWN == connection->remaining_upload_size); |
3114 | if ( (connection->current_chunk_offset == | 3114 | if ( (connection->current_chunk_offset == |
3115 | connection->current_chunk_size) && | 3115 | connection->current_chunk_size) && |
3116 | (0LLU != connection->current_chunk_offset) && | 3116 | (0 != connection->current_chunk_size) ) |
3117 | (available >= 2) ) | ||
3118 | { | 3117 | { |
3119 | size_t i; | 3118 | size_t i; |
3119 | mhd_assert (0 != available); | ||
3120 | /* skip new line at the *end* of a chunk */ | 3120 | /* skip new line at the *end* of a chunk */ |
3121 | i = 0; | 3121 | i = 0; |
3122 | if ( ('\r' == buffer_head[i]) && | 3122 | if ( (2 <= available) && |
3123 | ('\n' == buffer_head[i + 1]) ) | 3123 | ('\r' == buffer_head[0]) && |
3124 | ('\n' == buffer_head[1]) ) | ||
3124 | i += 2; /* skip CRLF */ | 3125 | i += 2; /* skip CRLF */ |
3125 | else if ('\n' == buffer_head[i]) /* TODO: Add MHD option to disallow */ | 3126 | else if ('\n' == buffer_head[0]) /* TODO: Add MHD option to disallow */ |
3126 | i++; /* skip bare LF */ | 3127 | i++; /* skip bare LF */ |
3128 | else if (2 > available) | ||
3129 | break; /* need more upload data */ | ||
3127 | if (0 == i) | 3130 | if (0 == i) |
3128 | { | 3131 | { |
3129 | /* malformed encoding */ | 3132 | /* malformed encoding */ |