libmicrohttpd

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

commit ec8aedc77bbaa293dc76d2aba98fc8ce1243cf68
parent a3a09cb33abca62ec05bd38ae8c84449fd6e6dca
Author: Christian Grothoff <christian@grothoff.org>
Date:   Sat, 12 Apr 2008 21:16:28 +0000

msgs

Diffstat:
MChangeLog | 12++++++++++++
Msrc/daemon/connection.c | 22++++++++++++++++++++++
Msrc/testcurl/daemontest_long_header.c | 4++--
3 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,15 @@ +Sat Apr 12 15:14:05 MDT 2008 + Restructured the code (curl-testcases and zzuf testcases + are now in different directories; code examples are in + src/examples/). + Fixed a problem (introduced in 0.2.3) with handling very + large requests (the code did not return proper error code). + If "--enable-messages" is specified, the code now includes + reasonable default HTML webpages for various build-in + errors (such as request too large and malformed requests). + Without that flag, the webpages returned will still be + empty. + Fri Apr 11 20:20:34 MDT 2008 I hereby dub libmicrohttpd a GNU package. -Richard Stallman diff --git a/src/daemon/connection.c b/src/daemon/connection.c @@ -50,7 +50,11 @@ * Intentionally empty here to keep our memory footprint * minimal. */ +#if HAVE_MESSAGES +#define REQUEST_TOO_BIG "<html><head><title>Request too big</title></head><body>Your HTTP header was too big for the memory constraints of this webserver.</body></html>" +#else #define REQUEST_TOO_BIG "" +#endif /** * Response text used when the request (http header) does not @@ -59,7 +63,11 @@ * Intentionally empty here to keep our memory footprint * minimal. */ +#if HAVE_MESSAGES +#define REQUEST_LACKS_HOST "<html><head><title>&quot;Host:&quot; header required</title></head><body>In HTTP 1.1, requests must include a &quot;Host:&quot; header, and your HTTP 1.1 request lacked such a header.</body></html>" +#else #define REQUEST_LACKS_HOST "" +#endif /** * Response text used when the request (http header) is @@ -68,7 +76,11 @@ * Intentionally empty here to keep our memory footprint * minimal. */ +#if HAVE_MESSAGES +#define REQUEST_MALFORMED "<html><head><title>Request malformed</title></head><body>Your HTTP request was syntactically incorrect.</body></html>" +#else #define REQUEST_MALFORMED "" +#endif #define EXTRA_CHECKS MHD_YES @@ -1627,6 +1639,8 @@ MHD_connection_handle_idle (struct MHD_Connection *connection) line = get_next_header_line (connection); if (line == NULL) { + if (connection->state != MHD_CONNECTION_INIT) + continue; if (connection->read_closed) { connection->state = MHD_CONNECTION_CLOSED; @@ -1643,6 +1657,8 @@ MHD_connection_handle_idle (struct MHD_Connection *connection) line = get_next_header_line (connection); if (line == NULL) { + if (connection->state != MHD_CONNECTION_URL_RECEIVED) + continue; if (connection->read_closed) { connection->state = MHD_CONNECTION_CLOSED; @@ -1668,6 +1684,8 @@ MHD_connection_handle_idle (struct MHD_Connection *connection) line = get_next_header_line (connection); if (line == NULL) { + if (connection->state != MHD_CONNECTION_HEADER_PART_RECEIVED) + continue; if (connection->read_closed) { connection->state = MHD_CONNECTION_CLOSED; @@ -1734,6 +1752,8 @@ MHD_connection_handle_idle (struct MHD_Connection *connection) line = get_next_header_line (connection); if (line == NULL) { + if (connection->state != MHD_CONNECTION_BODY_RECEIVED) + continue; if (connection->read_closed) { connection->state = MHD_CONNECTION_CLOSED; @@ -1759,6 +1779,8 @@ MHD_connection_handle_idle (struct MHD_Connection *connection) line = get_next_header_line (connection); if (line == NULL) { + if (connection->state != MHD_CONNECTION_FOOTER_PART_RECEIVED) + continue; if (connection->read_closed) { connection->state = MHD_CONNECTION_CLOSED; diff --git a/src/testcurl/daemontest_long_header.c b/src/testcurl/daemontest_long_header.c @@ -99,7 +99,7 @@ testLongUrlGet () cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; - d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ , + d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */, 1080, &apc_all, NULL, @@ -219,7 +219,7 @@ testLongHeaderGet () MHD_stop_daemon (d); free (url); if (code != MHD_HTTP_REQUEST_ENTITY_TOO_LARGE) - return 128; + return 128; return 0; }