[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 = ⁡
- optval_size = (socklen_t) sizeof (af);
+ opt_name = SO_DOMAIN;
+ poptval = ⁡
+ 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.