gnunet-svn
[Top][All Lists]
Advanced

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

[libmicrohttpd] 01/02: MHD_start_daemon(): added check for app-provided


From: gnunet
Subject: [libmicrohttpd] 01/02: MHD_start_daemon(): added check for app-provided socket to fit fd_set
Date: Thu, 16 Nov 2023 08:04:44 +0100

This is an automated email from the git hooks/post-receive script.

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit 89021a86ee9080802d39264e29a0bf084f7a9b52
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Thu Nov 16 10:03:33 2023 +0300

    MHD_start_daemon(): added check for app-provided socket to fit fd_set
---
 src/microhttpd/daemon.c | 91 ++++++++++++++++++++++++++++---------------------
 1 file changed, 53 insertions(+), 38 deletions(-)

diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index e97ddb91..45de2f59 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -8327,57 +8327,72 @@ MHD_start_daemon_va (unsigned int flags,
   }
   else
   {
+    if (MHD_D_IS_USING_SELECT_ (daemon) &&
+        (! MHD_D_DOES_SCKT_FIT_FDSET_ (daemon->listen_fd, daemon)) )
+    {
+#ifdef HAVE_MESSAGES
+      MHD_DLOG (daemon,
+                _ ("Listen socket descriptor (%d) is not " \
+                   "less than daemon FD_SETSIZE value (%d).\n"),
+                (int) daemon->listen_fd,
+                (int) MHD_D_GET_FD_SETSIZE_ (daemon));
+#endif
+      goto free_and_fail;
+    }
+    else
+    {
 #if defined(SOL_SOCKET) && (defined(SO_DOMAIN) || defined(SO_PROTOCOL_INFOW))
-    int af;
-    int opt_name;
-    void *poptval;
-    socklen_t optval_size;
+      int af;
+      int opt_name;
+      void *poptval;
+      socklen_t optval_size;
 #ifdef SO_DOMAIN
-    opt_name = SO_DOMAIN;
-    poptval = &af;
-    optval_size = (socklen_t) sizeof (af);
+      opt_name = SO_DOMAIN;
+      poptval = &af;
+      optval_size = (socklen_t) sizeof (af);
 #else  /* SO_PROTOCOL_INFOW */
-    WSAPROTOCOL_INFOW prot_info;
-    opt_name = SO_PROTOCOL_INFOW;
-    poptval = &prot_info;
-    optval_size = (socklen_t) sizeof (prot_info);
+      WSAPROTOCOL_INFOW prot_info;
+      opt_name = SO_PROTOCOL_INFOW;
+      poptval = &prot_info;
+      optval_size = (socklen_t) sizeof (prot_info);
 #endif /* SO_PROTOCOL_INFOW */
 
-    if (0 == getsockopt (daemon->listen_fd,
-                         SOL_SOCKET,
-                         opt_name,
-                         poptval,
-                         &optval_size))
-    {
+      if (0 == getsockopt (daemon->listen_fd,
+                           SOL_SOCKET,
+                           opt_name,
+                           poptval,
+                           &optval_size))
+      {
 #ifndef SO_DOMAIN
-      af = prot_info.iAddressFamily;
+        af = prot_info.iAddressFamily;
 #endif /* SO_DOMAIN */
-      switch (af)
-      {
-      case AF_INET:
-        daemon->listen_is_unix = _MHD_NO;
-        break;
+        switch (af)
+        {
+        case AF_INET:
+          daemon->listen_is_unix = _MHD_NO;
+          break;
 #ifdef HAVE_INET6
-      case AF_INET6:
-        *pflags |= MHD_USE_IPv6;
-        daemon->listen_is_unix = _MHD_NO;
-        break;
+        case AF_INET6:
+          *pflags |= MHD_USE_IPv6;
+          daemon->listen_is_unix = _MHD_NO;
+          break;
 #endif /* HAVE_INET6 */
 #ifdef AF_UNIX
-      case AF_UNIX:
-        daemon->port = 0;     /* special value for UNIX domain sockets */
-        daemon->listen_is_unix = _MHD_YES;
-        break;
+        case AF_UNIX:
+          daemon->port = 0;     /* special value for UNIX domain sockets */
+          daemon->listen_is_unix = _MHD_YES;
+          break;
 #endif /* AF_UNIX */
-      default:
-        daemon->port = 0;     /* ugh */
-        daemon->listen_is_unix = _MHD_UNKNOWN;
-        break;
+        default:
+          daemon->port = 0;     /* ugh */
+          daemon->listen_is_unix = _MHD_UNKNOWN;
+          break;
+        }
       }
-    }
-    else
+      else
 #endif /* SOL_SOCKET && (SO_DOMAIN || SO_PROTOCOL_INFOW)) */
-    daemon->listen_is_unix = _MHD_UNKNOWN;
+      daemon->listen_is_unix = _MHD_UNKNOWN;
+    }
 
     listen_fd = daemon->listen_fd;
 #ifdef MHD_USE_GETSOCKNAME

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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