diff options
-rw-r--r-- | src/cowboy_http.erl | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/cowboy_http.erl b/src/cowboy_http.erl index 9c38fae..a936e2c 100644 --- a/src/cowboy_http.erl +++ b/src/cowboy_http.erl @@ -95,17 +95,22 @@ request_line(Data) -> %% We just want to extract the path/qs and skip everything else. %% We do not really parse the URI, nor do we need to. uri_to_abspath(Data, Fun) -> - case binary:split(Data, <<" ">>) of - [_] -> %% We require the HTTP version. + case binary:match(Data, <<" ">>) of + nomatch -> %% We require the HTTP version. {error, badarg}; - [URI, Rest] -> - case binary:split(URI, <<"://">>) of - [_] -> %% Already is a path or "*". + {Pos1, _} -> + << URI:Pos1/binary, _:8, Rest/bits >> = Data, + case binary:match(URI, <<"://">>) of + nomatch -> %% Already is a path or "*". Fun(Rest, URI); - [_, NoScheme] -> - case binary:split(NoScheme, <<"/">>) of - [_] -> <<"/">>; - [_, NoHost] -> Fun(Rest, << "/", NoHost/binary >>) + {Pos2, _} -> + << _:Pos2/binary, _:24, NoScheme/bits >> = Rest, + case binary:match(NoScheme, <<"/">>) of + nomatch -> + Fun(Rest, <<"/">>); + {Pos3, _} -> + << _:Pos3/binary, _:8, NoHost/bits >> = NoScheme, + Fun(Rest, << "/", NoHost/binary >>) end end end. |