libmicrohttpd

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

commit c4246b5251bb8ee45ca66b4d24597fa26762d729
parent a5af7f737931d4ab4f64977d9a029a326f178f37
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Fri, 17 Jun 2022 20:11:32 +0300

Added tracking of the request URL length.

URL may have binary zeros after url-decoding, the length helps to detect
such situations.

Diffstat:
Msrc/microhttpd/connection.c | 14+++++++++++---
Msrc/microhttpd/internal.h | 5+++++
2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c @@ -2427,6 +2427,7 @@ transmit_error_response_len (struct MHD_Connection *connection, connection->version = NULL; connection->method = NULL; connection->url = NULL; + connection->url_len = 0; connection->last = NULL; connection->colon = NULL; connection->headers_received = NULL; @@ -3366,9 +3367,15 @@ parse_initial_message_line (struct MHD_Connection *connection, /* unescape URI *after* searching for arguments and log callback */ if (NULL != uri) - daemon->unescape_callback (daemon->unescape_callback_cls, - connection, - uri); + { + connection->url_len = + daemon->unescape_callback (daemon->unescape_callback_cls, + connection, + uri); + } + else + connection->url_len = 0; + connection->url = curi; return MHD_YES; } @@ -4755,6 +4762,7 @@ connection_reset (struct MHD_Connection *connection, c->method = NULL; c->http_mthd = MHD_HTTP_MTHD_NO_METHOD; c->url = NULL; + c->url_len = 0; memset (&c->rp_props, 0, sizeof(c->rp_props)); c->write_buffer = NULL; c->write_buffer_size = 0; diff --git a/src/microhttpd/internal.h b/src/microhttpd/internal.h @@ -1034,6 +1034,11 @@ struct MHD_Connection const char *url; /** + * The length of the @a url in characters, not including the terminating zero. + */ + size_t url_len; + + /** * HTTP version string (i.e. http/1.1). Allocated * in pool. */