mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-16 05:00:24 +00:00
Allow colon within path segments
Allow `cowboy_router:compile` to handle colon characters within path segments, rather than exiting with `badarg`. This is allowed via RFC 7230 2.7 -> [RFC 3986 3.3](https://tools.ietf.org/html/rfc3986#section-3.3): ``` segment = *pchar segment-nz = 1*pchar segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" ) ; non-zero-length segment without any colon ":" pchar = unreserved / pct-encoded / sub-delims / ":" / "@" ```
This commit is contained in:
parent
7cb3a9dbda
commit
82cd22a88b
2 changed files with 16 additions and 5 deletions
|
@ -101,12 +101,11 @@ compile_rules(<< S, Rest/bits >>, S, Segments, Rules, <<>>) ->
|
|||
compile_rules(Rest, S, Segments, Rules, <<>>);
|
||||
compile_rules(<< S, Rest/bits >>, S, Segments, Rules, Acc) ->
|
||||
compile_rules(Rest, S, [Acc|Segments], Rules, <<>>);
|
||||
%% Colon on path segment start is special, otherwise allow.
|
||||
compile_rules(<< $:, Rest/bits >>, S, Segments, Rules, <<>>) ->
|
||||
{NameBin, Rest2} = compile_binding(Rest, S, <<>>),
|
||||
Name = binary_to_atom(NameBin, utf8),
|
||||
compile_rules(Rest2, S, Segments, Rules, Name);
|
||||
compile_rules(<< $:, _/bits >>, _, _, _, _) ->
|
||||
error(badarg);
|
||||
compile_rules(<< $[, $., $., $., $], Rest/bits >>, S, Segments, Rules, Acc)
|
||||
when Acc =:= <<>> ->
|
||||
compile_rules(Rest, S, ['...'|Segments], Rules, Acc);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue