@@ -30,17 +30,22 @@ void Http::OnRequestRecv(std::string msg) {
3030 _request = Request ();
3131
3232 msg.erase (msg.size () - delim.size (), delim.size ());
33- bool parseRet = _request.parseStatus (msg);
33+ bool parseRet = _request.parseRequestLine (msg);
3434
3535 _log = toString<Address &>(client) + " : " + _request.getMethod () + " " +
3636 _request.getUri ().generate () + " " + _request.getVersion () + " -> " +
3737 toString<Address &>(host);
3838 parseRet |= _request.getUri ().decode ();
3939 accessLog_g.write (" Decoded URI: " + _request.getUri ().generate (), DEBUG);
40- parseRet |= _request.getUri ().resolveDots ();
40+
41+ bool validPath = !_request.getUri ().resolveDots ();
4142 accessLog_g.write (" Resolved URI: " + _request.getUri ().generate (), DEBUG);
4243
43- if (parseRet)
44+ const Uri &uriRef = _request.getUri ();
45+ validPath &= startsWith (uriRef.getPath (), " /" ) ||
46+ (_request.isMethod (" OPTIONS" ) && uriRef.getPath () == " *" );
47+
48+ if (parseRet || !validPath)
4449 processError (" 400" , " Bad Request" , true );
4550 else if (isHttpVersionValid (_request.getVersion ()) == false ) {
4651 processError (" 505" , " HTTP Version Not Supported" );
@@ -177,8 +182,7 @@ void Http::processRequest() {
177182 if (_context == NULL ) return processError (" 500" , " Internal Server Error" );
178183
179184 std::string contextUri = getContextArgs ();
180- if (Log::getLevel () >= DEBUG)
181- accessLog_g.write (" Context URI: '" + contextUri + " '" , DEBUG);
185+ accessLog_g.write (" Context URI: '" + contextUri + " '" , DEBUG);
182186
183187 if (isMethodValid () == false ) {
184188 bool bodyRequest = _request.isMethod (" POST" ) || _request.isMethod (" PUT" );
@@ -385,7 +389,7 @@ void Http::getPutResponse(std::string uri) {
385389void Http::processOptions (std::string uri) {
386390 _response.init (" HTTP/1.1" , " 200" , " OK" );
387391 _response.setHeader (" Allow" ,
388- concatenate (getAllowedMethods (uri != " / *" ), " , " ));
392+ concatenate (getAllowedMethods (uri != " *" ), " , " ));
389393 _response.setReady ();
390394}
391395
0 commit comments