From 332c274d87df36e413ea698b753e0ddaa55dd796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Sun, 23 Sep 2012 21:25:54 +0200 Subject: Use binary:match/2 instead of binary:split/2 in cowboy_http Also fix a bug introduced in a previous commit. --- src/cowboy_http.erl | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'src/cowboy_http.erl') 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. -- cgit v1.2.3