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:
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.
*/