|  | @@ -9917,22 +9917,8 @@ handle_request(struct mg_connection *conn)
 | 
	
		
			
				|  |  |  		    != NULL) {
 | 
	
		
			
				|  |  |  			*((char *)conn->request_info.query_string++) = '\0';
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		uri_len = (int)strlen(ri->local_uri);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		/* 1.2. decode url (if config says so) */
 | 
	
		
			
				|  |  | -		if (should_decode_url(conn)) {
 | 
	
		
			
				|  |  | -			mg_url_decode(
 | 
	
		
			
				|  |  | -			    ri->local_uri, uri_len, (char *)ri->local_uri, uri_len + 1, 0);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		/* 1.3. clean URIs, so a path like allowed_dir/../forbidden_file is
 | 
	
		
			
				|  |  | -		 * not possible */
 | 
	
		
			
				|  |  | -		remove_double_dots_and_double_slashes((char *)ri->local_uri);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		/* step 1. completed, the url is known now */
 | 
	
		
			
				|  |  | -		DEBUG_TRACE("URL: %s", ri->local_uri);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		/* 2. do a https redirect, if required */
 | 
	
		
			
				|  |  | +		/* 1.2. do a https redirect, if required. Do not decode URIs yet. */
 | 
	
		
			
				|  |  |  		if (!conn->client.is_ssl && conn->client.ssl_redir) {
 | 
	
		
			
				|  |  |  			ssl_index = get_first_ssl_listener_index(conn->ctx);
 | 
	
		
			
				|  |  |  			if (ssl_index >= 0) {
 | 
	
	
		
			
				|  | @@ -9948,6 +9934,20 @@ handle_request(struct mg_connection *conn)
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			return;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +		uri_len = (int)strlen(ri->local_uri);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/* 1.3. decode url (if config says so) */
 | 
	
		
			
				|  |  | +		if (should_decode_url(conn)) {
 | 
	
		
			
				|  |  | +			mg_url_decode(
 | 
	
		
			
				|  |  | +			    ri->local_uri, uri_len, (char *)ri->local_uri, uri_len + 1, 0);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/* 1.4. clean URIs, so a path like allowed_dir/../forbidden_file is
 | 
	
		
			
				|  |  | +		 * not possible */
 | 
	
		
			
				|  |  | +		remove_double_dots_and_double_slashes((char *)ri->local_uri);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/* step 1. completed, the url is known now */
 | 
	
		
			
				|  |  | +		DEBUG_TRACE("URL: %s", ri->local_uri);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		/* 3. if this ip has limited speed, set it for this connection */
 | 
	
		
			
				|  |  |  		conn->throttle = set_throttle(conn->ctx->config[THROTTLE],
 |