commit 1d164613b04e391f0ef93c66665e91da62b3a192 parent a8d2956096874354248f1dcdb86112dd2e7a6606 Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev> Date: Wed, 31 Dec 2025 16:26:11 +0100 Corrected handling buffer shortage at early stages Diffstat:
| M | src/mhd2/stream_funcs.c | | | 19 | +++++++++++-------- |
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/mhd2/stream_funcs.c b/src/mhd2/stream_funcs.c @@ -327,21 +327,24 @@ mhd_stream_get_no_space_err_status_code (struct MHD_Connection *restrict c, size_t opt_headers_size; size_t host_field_line_size; - mhd_assert (mhd_HTTP_STAGE_REQ_LINE_RECEIVED < c->stage); - mhd_assert (MHD_PROC_RECV_HEADERS <= stage); mhd_assert ((0 == add_element_size) || (NULL != add_element)); c->rq.too_large = true; - if (mhd_HTTP_STAGE_HEADERS_RECEIVED > c->stage) + if (mhd_HTTP_STAGE_REQ_LINE_RECEIVED < c->stage) { - mhd_assert (NULL != c->rq.field_lines.start); - opt_headers_size = - (size_t) ((c->read_buffer + c->read_buffer_offset) - - c->rq.field_lines.start); + if (mhd_HTTP_STAGE_HEADERS_RECEIVED > c->stage) + { + mhd_assert (NULL != c->rq.field_lines.start); + opt_headers_size = + (size_t) ((c->read_buffer + c->read_buffer_offset) + - c->rq.field_lines.start); + } + else + opt_headers_size = c->rq.field_lines.size; } else - opt_headers_size = c->rq.field_lines.size; + opt_headers_size = 0u; /* The read buffer is fully used by the request line, the field lines (headers) and internal information.