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:
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,