diff options
Diffstat (limited to 'src/microhttpd/connection.c')
-rw-r--r-- | src/microhttpd/connection.c | 38 |
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; |