X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fhttp%2Frequest.cpp;h=437b8ba6aff4ab476d3388192d3db7aa78fbdfab;hb=cc2e643d6ec3025db3fb6f0a4c1f77af05cf1026;hp=c948755ae78281cb1c36378de491a1cd0c948cd7;hpb=cf8d2e48581eeb8f1b83e8c48321a0bc2ffa6d83;p=libs%2Fnet.git diff --git a/source/http/request.cpp b/source/http/request.cpp index c948755..437b8ba 100644 --- a/source/http/request.cpp +++ b/source/http/request.cpp @@ -1,7 +1,7 @@ -#include +#include "request.h" +#include #include #include -#include "request.h" #include "utils.h" using namespace std; @@ -12,7 +12,10 @@ namespace Http { Request::Request(const string &m, const string &p): method(m), path(p) -{ } +{ + if(path.find(' ')!=string::npos) + throw invalid_argument("Request::Request"); +} string Request::str() const { @@ -24,7 +27,9 @@ string Request::str() const Request Request::parse(const string &str) { - unsigned lf = str.find('\n'); + string::size_type lf = str.find('\n'); + if(lf==0) + throw invalid_argument("Request::parse"); vector parts = split(str.substr(0, lf-(str[lf-1]=='\r')), ' ', 2); if(parts.size()<3) throw invalid_argument("Request::parse"); @@ -45,7 +50,7 @@ Request Request::from_url(const string &str) if(url.scheme!="http") throw invalid_argument("Request::from_url"); - string path = url.path; + string path = urlencode(url.path); if(path.empty()) path = "/"; if(!url.query.empty())