aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/microhttpd/connection.c')
-rw-r--r--src/microhttpd/connection.c38
1 files changed, 23 insertions, 15 deletions
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index 3e641d15..abc622e2 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -2236,6 +2236,7 @@ parse_initial_message_line (struct MHD_Connection *connection,
2236 uri++; 2236 uri++;
2237 if ((size_t)(uri - line) == line_len) 2237 if ((size_t)(uri - line) == line_len)
2238 { 2238 {
2239 /* No URI and no http version given */
2239 curi = ""; 2240 curi = "";
2240 uri_len = 0; 2241 uri_len = 0;
2241 uri = NULL; 2242 uri = NULL;
@@ -2257,29 +2258,36 @@ parse_initial_message_line (struct MHD_Connection *connection,
2257 http_version--; 2258 http_version--;
2258 if (http_version > uri) 2259 if (http_version > uri)
2259 { 2260 {
2261 /* http_version points to string before HTTP version string */
2260 http_version[0] = '\0'; 2262 http_version[0] = '\0';
2261 connection->version = http_version + 1; 2263 connection->version = http_version + 1;
2262 args = memchr (uri, 2264 uri_len = http_version - uri;
2263 '?',
2264 http_version - uri);
2265 } 2265 }
2266 else 2266 else
2267 { 2267 {
2268 connection->version = ""; 2268 connection->version = "";
2269 args = memchr (uri, 2269 uri_len = line_len - (uri - line);
2270 '?',
2271 line_len - (uri - line));
2272 } 2270 }
2273 uri_len = http_version - uri; 2271 /* check for spaces in URI if we are "strict" */
2274 } 2272 if ( (1 <= daemon->strict_for_client) &&
2275 if ( (1 <= daemon->strict_for_client) && 2273 (NULL != memchr (uri,
2276 (NULL != memchr (curi, 2274 ' ',
2277 ' ', 2275 uri_len)) )
2278 uri_len)) ) 2276 {
2279 { 2277 /* space exists in URI and we are supposed to be strict, reject */
2280 /* space exists in URI and we are supposed to be strict, reject */ 2278 return MHD_NO;
2281 return MHD_NO; 2279 }
2280
2281 /* unescape URI before searching for arguments */
2282 daemon->unescape_callback (daemon->unescape_callback_cls,
2283 connection,
2284 uri);
2285 uri_len = strlen (uri); /* recalculate: may have changed! */
2286 args = memchr (uri,
2287 '?',
2288 uri_len);
2282 } 2289 }
2290
2283 if (NULL != daemon->uri_log_callback) 2291 if (NULL != daemon->uri_log_callback)
2284 { 2292 {
2285 connection->client_aware = true; 2293 connection->client_aware = true;