libmicrohttpd

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

commit 086fcdacbb6dae97eaf9ad02874c77b9251d91c1
parent ff5f1944cd61c6b5c74fc9b372d0e36f1daaa164
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Wed, 31 Jan 2024 10:33:03 +0100

Fixes for 32-bit platforms

Diffstat:
Mdoc/examples/sessions.c | 12++++++++----
Msrc/examples/chunked_example.c | 2+-
Msrc/examples/post_example.c | 8++++++--
Msrc/microhttpd/test_postprocessor.c | 6++++--
Msrc/testcurl/test_concurrent_stop.c | 10+++++++++-
5 files changed, 28 insertions(+), 10 deletions(-)

diff --git a/doc/examples/sessions.c b/doc/examples/sessions.c @@ -524,8 +524,10 @@ post_iterator (void *cls, } if (0 == strcmp ("v1", key)) { - if (size + off > sizeof(session->value_1)) - size = sizeof (session->value_1) - off; + if (off >= sizeof(session->value_1) - 1) + return MHD_YES; /* Discard extra data */ + if (size + off >= sizeof(session->value_1)) + size = (size_t) (sizeof (session->value_1) - off - 1); /* crop extra data */ memcpy (&session->value_1[off], data, size); @@ -535,8 +537,10 @@ post_iterator (void *cls, } if (0 == strcmp ("v2", key)) { - if (size + off > sizeof(session->value_2)) - size = sizeof (session->value_2) - off; + if (off >= sizeof(session->value_2) - 1) + return MHD_YES; /* Discard extra data */ + if (size + off >= sizeof(session->value_2)) + size = (size_t) (sizeof (session->value_2) - off - 1); /* crop extra data */ memcpy (&session->value_2[off], data, size); diff --git a/src/examples/chunked_example.c b/src/examples/chunked_example.c @@ -62,7 +62,7 @@ callback (void *cls, if (buf_size < (param->response_size - pos)) size_to_copy = buf_size; else - size_to_copy = param->response_size - pos; + size_to_copy = (size_t) (param->response_size - pos); memcpy (buf, param->response_data + pos, size_to_copy); diff --git a/src/examples/post_example.c b/src/examples/post_example.c @@ -520,8 +520,10 @@ post_iterator (void *cls, } if (0 == strcmp ("v1", key)) { + if (off >= sizeof(session->value_1) - 1) + return MHD_YES; /* Discard extra data */ if (size + off >= sizeof(session->value_1)) - size = sizeof (session->value_1) - off - 1; + size = (size_t) (sizeof (session->value_1) - off - 1); /* crop extra data */ memcpy (&session->value_1[off], data, size); @@ -530,8 +532,10 @@ post_iterator (void *cls, } if (0 == strcmp ("v2", key)) { + if (off >= sizeof(session->value_2) - 1) + return MHD_YES; /* Discard extra data */ if (size + off >= sizeof(session->value_2)) - size = sizeof (session->value_2) - off - 1; + size = (size_t) (sizeof (session->value_2) - off - 1); /* crop extra data */ memcpy (&session->value_2[off], data, size); diff --git a/src/microhttpd/test_postprocessor.c b/src/microhttpd/test_postprocessor.c @@ -183,7 +183,8 @@ value_checker (void *cls, (mismatch (filename, expect->fname)) || (mismatch (content_type, expect->cnt_type)) || (mismatch (transfer_encoding, expect->tr_enc)) || - (mismatch2 (data, expect->data, off, size))) + (strlen (expect->data) < off) || + (mismatch2 (data, expect->data, (size_t) off, size))) { *idxp = (unsigned int) -1; fprintf (stderr, @@ -208,7 +209,8 @@ value_checker (void *cls, (mismatch (filename, expect->fname)), (mismatch (content_type, expect->cnt_type)), (mismatch (transfer_encoding, expect->tr_enc)), - (mismatch2 (data, expect->data, off, size))); + (strlen (expect->data) < off) + || (mismatch2 (data, expect->data, (size_t) off, size))); return MHD_NO; } if ( ( (NULL == expect->data) && diff --git a/src/testcurl/test_concurrent_stop.c b/src/testcurl/test_concurrent_stop.c @@ -44,7 +44,15 @@ /** * How many requests do we do in parallel? */ -#define PAR (MHD_CPU_COUNT * 4) +#if SIZEOF_SIZE_T >= 8 || MHD_CPU_COUNT < 8 +# define PAR (MHD_CPU_COUNT * 4) +#elif MHD_CPU_COUNT < 16 +/* Limit load */ +# define PAR (MHD_CPU_COUNT * 2) +#else +/* Limit load */ +# define PAR (MHD_CPU_COUNT * 1) +#endif /** * Do we use HTTP 1.1?