gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r35892 - libmicrohttpd/src/microhttpd


From: gnunet
Subject: [GNUnet-SVN] r35892 - libmicrohttpd/src/microhttpd
Date: Mon, 8 Jun 2015 23:57:52 +0200

Author: Karlson2k
Date: 2015-06-08 23:57:52 +0200 (Mon, 08 Jun 2015)
New Revision: 35892

Modified:
   libmicrohttpd/src/microhttpd/daemon.c
Log:
recv_param_adapter() and send_param_adapter(): reduce receive/send size if it's 
too large

Modified: libmicrohttpd/src/microhttpd/daemon.c
===================================================================
--- libmicrohttpd/src/microhttpd/daemon.c       2015-06-08 20:45:27 UTC (rev 
35891)
+++ libmicrohttpd/src/microhttpd/daemon.c       2015-06-08 21:57:52 UTC (rev 
35892)
@@ -1033,6 +1033,7 @@
                    size_t i)
 {
   ssize_t ret;
+  const size_t requested_size = i;
 
   if ( (MHD_INVALID_SOCKET == connection->socket_fd) ||
        (MHD_CONNECTION_CLOSED == connection->state) )
@@ -1040,9 +1041,17 @@
       MHD_set_socket_errno_ (ENOTCONN);
       return -1;
     }
-  ret = recv (connection->socket_fd, other, i, MSG_NOSIGNAL);
+#ifdef MHD_POSIX_SOCKETS
+  if (i > SSIZE_MAX)
+    i = SSIZE_MAX; /* return value limit */
+#else  /* MHD_WINSOCK_SOCKETS */
+  if (i > INT_MAX)
+    i = INT_MAX; /* return value limit */
+#endif /* MHD_WINSOCK_SOCKETS */
+
+  ret = recv(connection->socket_fd, other, i, MSG_NOSIGNAL);
 #if EPOLL_SUPPORT
-  if (ret < (ssize_t) i)
+  if (0 > ret || requested_size > (size_t) ret)
     {
       /* partial read --- no longer read-ready */
       connection->epoll_state &= ~MHD_EPOLL_STATE_READ_READY;
@@ -1066,6 +1075,7 @@
                    size_t i)
 {
   ssize_t ret;
+  const size_t requested_size = i;
 #if LINUX
   MHD_socket fd;
   off_t offset;
@@ -1078,6 +1088,14 @@
       MHD_set_socket_errno_ (ENOTCONN);
       return -1;
     }
+#ifdef MHD_POSIX_SOCKETS
+  if (i > SSIZE_MAX)
+    i = SSIZE_MAX; /* return value limit */
+#else  /* MHD_WINSOCK_SOCKETS */
+  if (i > INT_MAX)
+    i = INT_MAX; /* return value limit */
+#endif /* MHD_WINSOCK_SOCKETS */
+
   if (0 != (connection->daemon->options & MHD_USE_SSL))
     return send (connection->socket_fd, other, i, MSG_NOSIGNAL);
 #if LINUX
@@ -1118,7 +1136,7 @@
 #endif
   ret = send (connection->socket_fd, other, i, MSG_NOSIGNAL);
 #if EPOLL_SUPPORT
-  if (ret < (ssize_t) i)
+  if (0 > ret || requested_size > (size_t) ret)
     {
       /* partial write --- no longer write-ready */
       connection->epoll_state &= ~MHD_EPOLL_STATE_WRITE_READY;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]