From 503a0c76628236ed14a22802c2ebd523148ab0e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Wed, 20 Jul 2011 22:07:35 +0200 Subject: URL decode paths This fixes issue #33. --- src/cowboy_dispatcher.erl | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/cowboy_dispatcher.erl b/src/cowboy_dispatcher.erl index 718b13e..c402e01 100644 --- a/src/cowboy_dispatcher.erl +++ b/src/cowboy_dispatcher.erl @@ -56,10 +56,11 @@ split_path(Path) -> -spec do_split_path(binary(), <<_:8>>) -> path_tokens(). do_split_path(RawPath, Separator) -> - case binary:split(RawPath, Separator, [global, trim]) of + EncodedPath = case binary:split(RawPath, Separator, [global, trim]) of [<<>>|Path] -> Path; Path -> Path - end. + end, + [quoted:from_url(Token) || Token <- EncodedPath]. %% @doc Match hostname tokens and path tokens against dispatch rules. %% @@ -214,7 +215,10 @@ split_path_test_() -> {<<"/users?a">>, [<<"users">>], <<"/users">>, <<"a">>}, {<<"/users/42/friends?a=b&c=d&e=notsure?whatever">>, [<<"users">>, <<"42">>, <<"friends">>], - <<"/users/42/friends">>, <<"a=b&c=d&e=notsure?whatever">>} + <<"/users/42/friends">>, <<"a=b&c=d&e=notsure?whatever">>}, + {<<"/users/a+b/c%21d?e+f=g+h">>, + [<<"users">>, <<"a b">>, <<"c!d">>], + <<"/users/a+b/c%21d">>, <<"e+f=g+h">>} ], [{P, fun() -> {R, RawP, Qs} = split_path(P) end} || {P, R, RawP, Qs} <- Tests]. -- cgit v1.2.3