diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cowboy_static.erl | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/cowboy_static.erl b/src/cowboy_static.erl index 29ac809..19c15c2 100644 --- a/src/cowboy_static.erl +++ b/src/cowboy_static.erl @@ -120,7 +120,7 @@ init_dir(Req, Path, HowToAccess, Extra) when is_list(Path) -> init_dir(Req, Path, HowToAccess, Extra) -> Dir = fullpath(filename:absname(Path)), PathInfo = cowboy_req:path_info(Req), - Filepath = filename:join([Dir|[escape_reserved(P, <<>>) || P <- PathInfo]]), + Filepath = filename:join([Dir|escape_reserved(PathInfo)]), Len = byte_size(Dir), case fullpath(Filepath) of << Dir:Len/binary, $/, _/binary >> -> @@ -131,6 +131,9 @@ init_dir(Req, Path, HowToAccess, Extra) -> {cowboy_rest, Req, error} end. +escape_reserved([]) -> []; +escape_reserved([P|Tail]) -> [escape_reserved(P, <<>>)|escape_reserved(Tail)]. + %% We escape the slash found in path segments because %% a segment corresponds to a directory entry, and %% therefore those slashes are expected to be part of @@ -315,7 +318,7 @@ forbidden(Req, State) -> -spec content_types_provided(Req, State) -> {[{binary(), get_file}], Req, State} when State::state(). -content_types_provided(Req, State={Path, _, Extra}) -> +content_types_provided(Req, State={Path, _, Extra}) when is_list(Extra) -> case lists:keyfind(mimetypes, 1, Extra) of false -> {[{cow_mimetypes:web(Path), get_file}], Req, State}; |