diff --git a/src/mhd2/post_parser_funcs.c b/src/mhd2/post_parser_funcs.c index 7abe10ad..3ed42548 100644 --- a/src/mhd2/post_parser_funcs.c +++ b/src/mhd2/post_parser_funcs.c @@ -2911,7 +2911,8 @@ mhd_stream_process_post_finish (struct MHD_Connection *restrict c) const struct MHD_UploadAction *act; bool state_changed; - if (MHD_POST_PARSE_RES_OK == p_data->parse_result) + if ((MHD_POST_PARSE_RES_OK == p_data->parse_result) && + ! c->discard_request) { // TODO: implement processing in the connection buffer if (check_post_leftovers (c)) diff --git a/src/mhd2/stream_process_request.c b/src/mhd2/stream_process_request.c index ff2a9d8e..3114d0ed 100644 --- a/src/mhd2/stream_process_request.c +++ b/src/mhd2/stream_process_request.c @@ -3262,6 +3262,8 @@ process_request_chunked_body (struct MHD_Connection *restrict c) mhd_assert ((0 == cntn_data_ready) || \ (MHD_POST_PARSE_RES_OK != c->rq.u_proc.post.parse_result) || \ (MHD_CONNECTION_BODY_RECEIVING != c->state)); + if (MHD_CONNECTION_BODY_RECEIVING != c->state) + c->discard_request = true; c->rq.cntn.recv_size += size_provided; } else @@ -3394,6 +3396,9 @@ process_request_nonchunked_body (struct MHD_Connection *restrict c) mhd_assert ((0 == size_provided) || \ (MHD_POST_PARSE_RES_OK != c->rq.u_proc.post.parse_result) || \ (MHD_CONNECTION_BODY_RECEIVING != c->state)); + if (MHD_CONNECTION_BODY_RECEIVING != c->state) + c->discard_request = true; + read_buf_reuse = true; c->rq.cntn.proc_size += cntn_data_ready; if (c->rq.cntn.recv_size == c->rq.cntn.cntn_size)