diff options
author | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2024-01-04 16:33:36 +0300 |
---|---|---|
committer | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2024-01-04 16:33:36 +0300 |
commit | 8bfaec71d55f2e9e3251829c9fd15ae92b1203f8 (patch) | |
tree | e0c53d9701439beb7782610a2aa5afd213fb4844 | |
parent | 156e10012c539472c0387c5904d4c29b257499af (diff) | |
download | libmicrohttpd-8bfaec71d55f2e9e3251829c9fd15ae92b1203f8.tar.gz libmicrohttpd-8bfaec71d55f2e9e3251829c9fd15ae92b1203f8.zip |
MHD_OPTION_CONNECTION_MEMORY_{LIMIT,INCREMENT}: added ignore of zero value
-rw-r--r-- | src/include/microhttpd.h | 4 | ||||
-rw-r--r-- | src/microhttpd/daemon.c | 65 |
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: |