libmicrohttpd

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

commit 1cf2ccde32386b2d93305ff6667b088522e03f10
parent e3ed5e0d17864bff9088092f81701a70fda13162
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Wed, 15 Sep 2021 19:47:17 +0300

test_postprocessor: added test with double value

Diffstat:
Msrc/microhttpd/test_postprocessor.c | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 81 insertions(+), 0 deletions(-)

diff --git a/src/microhttpd/test_postprocessor.c b/src/microhttpd/test_postprocessor.c @@ -707,6 +707,86 @@ test_empty_key (void) } +static int +test_double_value (void) +{ + const char form_data[] = URL_DATA "=abcdef"; + size_t step; + const size_t size = MHD_STATICSTR_LEN_ (form_data); + const size_t safe_size = MHD_STATICSTR_LEN_ (URL_DATA); + + for (step = 1; size >= step; ++step) + { + size_t i; + struct MHD_Connection connection; + struct MHD_HTTP_Header header; + struct MHD_PostProcessor *pp; + unsigned int results_off = URL_START; + unsigned int results_final = results_off + 1; /* First value is correct */ + memset (&connection, 0, sizeof (struct MHD_Connection)); + memset (&header, 0, sizeof (struct MHD_HTTP_Header)); + + connection.headers_received = &header; + connection.headers_received_tail = &header; + header.header = MHD_HTTP_HEADER_CONTENT_TYPE; + header.header_size = MHD_STATICSTR_LEN_ (MHD_HTTP_HEADER_CONTENT_TYPE); + header.value = MHD_HTTP_POST_ENCODING_FORM_URLENCODED; + header.value_size = + MHD_STATICSTR_LEN_ (MHD_HTTP_POST_ENCODING_FORM_URLENCODED); + header.kind = MHD_HEADER_KIND; + pp = MHD_create_post_processor (&connection, + 1024, &value_checker, &results_off); + if (NULL == pp) + { + fprintf (stderr, "Failed to create post processor.\n" + "Line: %u\n", (unsigned int) __LINE__); + exit (50); + } + for (i = 0; size > i; i += step) + { + if (MHD_NO != MHD_post_process (pp, + form_data + i, + (step > size - i) ? (size - i) : step)) + { + if (safe_size == i + step) + results_final = URL_END; + if (safe_size < i + step) + { + fprintf (stderr, "Succeed to process the broken data.\n" + "i: %u. step: %u.\n" + "Line: %u\n", (unsigned) i, (unsigned) step, + (unsigned int) __LINE__); + exit (49); + } + } + else + { + if (safe_size >= i + step) + { + fprintf (stderr, "Failed to process the data.\n" + "i: %u. step: %u.\n" + "Line: %u\n", (unsigned) i, (unsigned) step, + (unsigned int) __LINE__); + exit (49); + } + } + } + MHD_destroy_post_processor (pp); + if (results_final != results_off) + { + fprintf (stderr, + "Test failed in line %u.\tStep:%u\n Got: %u\tExpected: %u\n", + (unsigned int) __LINE__, + (unsigned int) step, + results_off, + results_final); + return 1; + } + } + return 0; +} + + int main (int argc, char *const *argv) { @@ -719,6 +799,7 @@ main (int argc, char *const *argv) errorCount += test_multipart (); errorCount += test_nested_multipart (); errorCount += test_empty_key (); + errorCount += test_double_value (); errorCount += test_overflow (); if (errorCount != 0) fprintf (stderr, "Error (code: %u)\n", errorCount);