libmicrohttpd

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

commit 8bfaec71d55f2e9e3251829c9fd15ae92b1203f8
parent 156e10012c539472c0387c5904d4c29b257499af
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Thu,  4 Jan 2024 16:33:36 +0300

MHD_OPTION_CONNECTION_MEMORY_{LIMIT,INCREMENT}: added ignore of zero value

Diffstat:
Msrc/include/microhttpd.h | 4+++-
Msrc/microhttpd/daemon.c | 65++++++++++++++++++++++++++++++++++++++---------------------------
2 files changed, 41 insertions(+), 28 deletions(-)

diff --git a/src/include/microhttpd.h b/src/include/microhttpd.h @@ -96,7 +96,7 @@ extern "C" * they are parsed as decimal numbers. * Example: 0x01093001 = 1.9.30-1. */ -#define MHD_VERSION 0x00097709 +#define MHD_VERSION 0x00097710 /* If generic headers don't work on your platform, include headers which define 'va_list', 'size_t', 'ssize_t', 'intptr_t', 'off_t', @@ -1667,6 +1667,7 @@ enum MHD_OPTION * of the memory will be typically used for IO, and TCP buffers are * unlikely to support window sizes above 64k on most systems. * Values below 64 bytes are completely unusable. + * Since #MHD_VERSION 0x00097710 silently ignored if followed by zero value. */ MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1, @@ -1910,6 +1911,7 @@ enum MHD_OPTION * Increment to use for growing the read buffer (followed by a * `size_t`). * Must not be higher than 1/4 of #MHD_OPTION_CONNECTION_MEMORY_LIMIT. + * Since #MHD_VERSION 0x00097710 silently ignored if followed by zero value. */ MHD_OPTION_CONNECTION_MEMORY_INCREMENT = 21, diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c @@ -6617,42 +6617,53 @@ parse_options_va (struct MHD_Daemon *daemon, switch (opt) { case MHD_OPTION_CONNECTION_MEMORY_LIMIT: - daemon->pool_size = va_arg (ap, - size_t); - if (64 > daemon->pool_size) + if (1) { + size_t val; + + val = va_arg (ap, + size_t); + if (0 != val) + { + daemon->pool_size = val; + if (64 > daemon->pool_size) + { #ifdef HAVE_MESSAGES - MHD_DLOG (daemon, - _ ("Warning: specified MHD_OPTION_CONNECTION_MEMORY_LIMIT " \ - "value is too small and rounded up to 64.\n")); + MHD_DLOG (daemon, + _ ("Warning: specified " \ + "MHD_OPTION_CONNECTION_MEMORY_LIMIT " \ + "value is too small and rounded up to 64.\n")); #endif /* HAVE_MESSAGES */ - daemon->pool_size = 64; + daemon->pool_size = 64; + } + if (daemon->pool_size / 4 < daemon->pool_increment) + daemon->pool_increment = daemon->pool_size / 4; + } } - if (daemon->pool_size / 4 < daemon->pool_increment) - daemon->pool_increment = daemon->pool_size / 4; break; case MHD_OPTION_CONNECTION_MEMORY_INCREMENT: - daemon->pool_increment = va_arg (ap, - size_t); - if (0 == daemon->pool_increment) - { -#ifdef HAVE_MESSAGES - MHD_DLOG (daemon, - _ ("The MHD_OPTION_CONNECTION_MEMORY_INCREMENT value " \ - "cannot be zero.\n")); -#endif /* HAVE_MESSAGES */ - return MHD_NO; - } - if (daemon->pool_size / 4 < daemon->pool_increment) + if (1) { + size_t val; + + val = va_arg (ap, + size_t); + + if (0 != val) + { + daemon->pool_increment = val; + if (daemon->pool_size / 4 < daemon->pool_increment) + { #ifdef HAVE_MESSAGES - MHD_DLOG (daemon, - _ ("Warning: specified " \ - "MHD_OPTION_CONNECTION_MEMORY_INCREMENT value is too " \ - "large and rounded down to 1/4 of " \ - "MHD_OPTION_CONNECTION_MEMORY_LIMIT.\n")); + MHD_DLOG (daemon, + _ ("Warning: specified " \ + "MHD_OPTION_CONNECTION_MEMORY_INCREMENT value is " \ + "too large and rounded down to 1/4 of " \ + "MHD_OPTION_CONNECTION_MEMORY_LIMIT.\n")); #endif /* HAVE_MESSAGES */ - daemon->pool_increment = daemon->pool_size / 4; + daemon->pool_increment = daemon->pool_size / 4; + } + } } break; case MHD_OPTION_CONNECTION_LIMIT: