aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Grin (Karlson2k) <k2k@narod.ru>2024-01-04 16:33:36 +0300
committerEvgeny Grin (Karlson2k) <k2k@narod.ru>2024-01-04 16:33:36 +0300
commit8bfaec71d55f2e9e3251829c9fd15ae92b1203f8 (patch)
treee0c53d9701439beb7782610a2aa5afd213fb4844
parent156e10012c539472c0387c5904d4c29b257499af (diff)
downloadlibmicrohttpd-8bfaec71d55f2e9e3251829c9fd15ae92b1203f8.tar.gz
libmicrohttpd-8bfaec71d55f2e9e3251829c9fd15ae92b1203f8.zip
MHD_OPTION_CONNECTION_MEMORY_{LIMIT,INCREMENT}: added ignore of zero value
-rw-r--r--src/include/microhttpd.h4
-rw-r--r--src/microhttpd/daemon.c65
2 files changed, 41 insertions, 28 deletions
diff --git a/src/include/microhttpd.h b/src/include/microhttpd.h
index 194a268c..b0b06d51 100644
--- a/src/include/microhttpd.h
+++ b/src/include/microhttpd.h
@@ -96,7 +96,7 @@ extern "C"
96 * they are parsed as decimal numbers. 96 * they are parsed as decimal numbers.
97 * Example: 0x01093001 = 1.9.30-1. 97 * Example: 0x01093001 = 1.9.30-1.
98 */ 98 */
99#define MHD_VERSION 0x00097709 99#define MHD_VERSION 0x00097710
100 100
101/* If generic headers don't work on your platform, include headers 101/* If generic headers don't work on your platform, include headers
102 which define 'va_list', 'size_t', 'ssize_t', 'intptr_t', 'off_t', 102 which define 'va_list', 'size_t', 'ssize_t', 'intptr_t', 'off_t',
@@ -1667,6 +1667,7 @@ enum MHD_OPTION
1667 * of the memory will be typically used for IO, and TCP buffers are 1667 * of the memory will be typically used for IO, and TCP buffers are
1668 * unlikely to support window sizes above 64k on most systems. 1668 * unlikely to support window sizes above 64k on most systems.
1669 * Values below 64 bytes are completely unusable. 1669 * Values below 64 bytes are completely unusable.
1670 * Since #MHD_VERSION 0x00097710 silently ignored if followed by zero value.
1670 */ 1671 */
1671 MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1, 1672 MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1,
1672 1673
@@ -1910,6 +1911,7 @@ enum MHD_OPTION
1910 * Increment to use for growing the read buffer (followed by a 1911 * Increment to use for growing the read buffer (followed by a
1911 * `size_t`). 1912 * `size_t`).
1912 * Must not be higher than 1/4 of #MHD_OPTION_CONNECTION_MEMORY_LIMIT. 1913 * Must not be higher than 1/4 of #MHD_OPTION_CONNECTION_MEMORY_LIMIT.
1914 * Since #MHD_VERSION 0x00097710 silently ignored if followed by zero value.
1913 */ 1915 */
1914 MHD_OPTION_CONNECTION_MEMORY_INCREMENT = 21, 1916 MHD_OPTION_CONNECTION_MEMORY_INCREMENT = 21,
1915 1917
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 721c5ba7..b433bff4 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -6617,42 +6617,53 @@ parse_options_va (struct MHD_Daemon *daemon,
6617 switch (opt) 6617 switch (opt)
6618 { 6618 {
6619 case MHD_OPTION_CONNECTION_MEMORY_LIMIT: 6619 case MHD_OPTION_CONNECTION_MEMORY_LIMIT:
6620 daemon->pool_size = va_arg (ap, 6620 if (1)
6621 size_t);
6622 if (64 > daemon->pool_size)
6623 { 6621 {
6622 size_t val;
6623
6624 val = va_arg (ap,
6625 size_t);
6626 if (0 != val)
6627 {
6628 daemon->pool_size = val;
6629 if (64 > daemon->pool_size)
6630 {
6624#ifdef HAVE_MESSAGES 6631#ifdef HAVE_MESSAGES
6625 MHD_DLOG (daemon, 6632 MHD_DLOG (daemon,
6626 _ ("Warning: specified MHD_OPTION_CONNECTION_MEMORY_LIMIT " \ 6633 _ ("Warning: specified " \
6627 "value is too small and rounded up to 64.\n")); 6634 "MHD_OPTION_CONNECTION_MEMORY_LIMIT " \
6635 "value is too small and rounded up to 64.\n"));
6628#endif /* HAVE_MESSAGES */ 6636#endif /* HAVE_MESSAGES */
6629 daemon->pool_size = 64; 6637 daemon->pool_size = 64;
6638 }
6639 if (daemon->pool_size / 4 < daemon->pool_increment)
6640 daemon->pool_increment = daemon->pool_size / 4;
6641 }
6630 } 6642 }
6631 if (daemon->pool_size / 4 < daemon->pool_increment)
6632 daemon->pool_increment = daemon->pool_size / 4;
6633 break; 6643 break;
6634 case MHD_OPTION_CONNECTION_MEMORY_INCREMENT: 6644 case MHD_OPTION_CONNECTION_MEMORY_INCREMENT:
6635 daemon->pool_increment = va_arg (ap, 6645 if (1)
6636 size_t);
6637 if (0 == daemon->pool_increment)
6638 {
6639#ifdef HAVE_MESSAGES
6640 MHD_DLOG (daemon,
6641 _ ("The MHD_OPTION_CONNECTION_MEMORY_INCREMENT value " \
6642 "cannot be zero.\n"));
6643#endif /* HAVE_MESSAGES */
6644 return MHD_NO;
6645 }
6646 if (daemon->pool_size / 4 < daemon->pool_increment)
6647 { 6646 {
6647 size_t val;
6648
6649 val = va_arg (ap,
6650 size_t);
6651
6652 if (0 != val)
6653 {
6654 daemon->pool_increment = val;
6655 if (daemon->pool_size / 4 < daemon->pool_increment)
6656 {
6648#ifdef HAVE_MESSAGES 6657#ifdef HAVE_MESSAGES
6649 MHD_DLOG (daemon, 6658 MHD_DLOG (daemon,
6650 _ ("Warning: specified " \ 6659 _ ("Warning: specified " \
6651 "MHD_OPTION_CONNECTION_MEMORY_INCREMENT value is too " \ 6660 "MHD_OPTION_CONNECTION_MEMORY_INCREMENT value is " \
6652 "large and rounded down to 1/4 of " \ 6661 "too large and rounded down to 1/4 of " \
6653 "MHD_OPTION_CONNECTION_MEMORY_LIMIT.\n")); 6662 "MHD_OPTION_CONNECTION_MEMORY_LIMIT.\n"));
6654#endif /* HAVE_MESSAGES */ 6663#endif /* HAVE_MESSAGES */
6655 daemon->pool_increment = daemon->pool_size / 4; 6664 daemon->pool_increment = daemon->pool_size / 4;
6665 }
6666 }
6656 } 6667 }
6657 break; 6668 break;
6658 case MHD_OPTION_CONNECTION_LIMIT: 6669 case MHD_OPTION_CONNECTION_LIMIT: