libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit 16f6b9460c6da8f32848bfdfd09cebf8f48d14b5
parent 3d10823017ebb69d92c1c4b3ac5d663b257eacb4
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Wed, 29 Sep 2021 15:19:02 +0300

connection_alloc_memory(): fixed missing update of buffers sizes

Diffstat:
Msrc/microhttpd/connection.c | 11+++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c @@ -221,14 +221,18 @@ connection_alloc_memory (struct MHD_Connection *connection, if (c->write_buffer_size - c->write_buffer_append_offset >= need_to_free) { char *buf; + const size_t new_buf_size = c->write_buffer_size - need_to_free; buf = MHD_pool_reallocate (pool, c->write_buffer, c->write_buffer_size, - c->write_buffer_size - need_to_free); + new_buf_size); mhd_assert (c->write_buffer == buf); #ifdef NDEBUG (void) buf; /* mute compiler warning */ #endif + mhd_assert (c->write_buffer_append_offset <= new_buf_size); + mhd_assert (c->write_buffer_send_offset <= new_buf_size); + c->write_buffer_size = new_buf_size; } else return NULL; @@ -239,14 +243,17 @@ connection_alloc_memory (struct MHD_Connection *connection, if (c->read_buffer_size - c->read_buffer_offset >= need_to_free) { char *buf; + const size_t new_buf_size = c->read_buffer_size - need_to_free; buf = MHD_pool_reallocate (pool, c->read_buffer, c->read_buffer_size, - c->read_buffer_size - need_to_free); + new_buf_size); mhd_assert (c->read_buffer == buf); #ifdef NDEBUG (void) buf; /* mute compiler warning */ #endif + mhd_assert (c->read_buffer_offset <= new_buf_size); + c->read_buffer_size = new_buf_size; } else return NULL;