libmicrohttpd

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

commit 85771d883b5038b16e0028942bcd0e25744b29b0
parent de60f56ce04b76eb793284fbc107e45d448e5688
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Fri,  7 Aug 2015 07:37:57 +0000

connection.c: MHD_connection_handle_write(): check for limits, fix compiler warning

Diffstat:
Msrc/microhttpd/MHD_limits.h | 4++++
Msrc/microhttpd/connection.c | 14+++++++++-----
2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/microhttpd/MHD_limits.h b/src/microhttpd/MHD_limits.h @@ -37,6 +37,10 @@ #define INT32_MAX ((int32_t)0x7FFFFFFF) #endif /* !INT32_MAX */ +#ifndef SIZE_MAX +#define SIZE_MAX ((size_t) ~((size_t)0)) +#endif /* !SIZE_MAX */ + #ifndef OFF_T_MAX #define OFF_T_MAX ((off_t) ~(((uint64_t) 1) << (8 * sizeof(off_t) - 1))) #endif /* !OFF_T_MAX */ diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c @@ -2133,18 +2133,22 @@ MHD_connection_handle_write (struct MHD_Connection *connection) if (connection->response_write_position < connection->response->total_size) { + int err; + uint64_t data_write_offset; if (NULL != response->crc) (void) MHD_mutex_lock_ (&response->mutex); if (MHD_YES != try_ready_normal_body (connection)) break; + data_write_offset = connection->response_write_position + - response->data_start; + if (data_write_offset > (uint64_t)SIZE_MAX) + MHD_PANIC("Data offset exceeds limit"); ret = connection->send_cls (connection, &response->data - [connection->response_write_position - - response->data_start], + [(size_t)data_write_offset], response->data_size - - (connection->response_write_position - - response->data_start)); - const int err = MHD_socket_errno_; + (size_t)data_write_offset); + err = MHD_socket_errno_; #if DEBUG_SEND_DATA if (ret > 0) fprintf (stderr,