diff options
author | Paul Fisher <[email protected]> | 2015-12-22 12:19:28 -0600 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2018-01-16 11:24:49 +0100 |
commit | 82cd22a88b3f87064d9f17e36652b104b709a679 (patch) | |
tree | b5213d9ce5120381cd3d2179ff12bc24622fe9be /src/cowboy_router.erl | |
parent | 7cb3a9dbda1c836057e439ed28ebda9799453b34 (diff) | |
download | cowboy-82cd22a88b3f87064d9f17e36652b104b709a679.tar.gz cowboy-82cd22a88b3f87064d9f17e36652b104b709a679.tar.bz2 cowboy-82cd22a88b3f87064d9f17e36652b104b709a679.zip |
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 / ":" / "@"
```
Diffstat (limited to 'src/cowboy_router.erl')
-rw-r--r-- | src/cowboy_router.erl | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/src/cowboy_router.erl b/src/cowboy_router.erl index fb5c383..92ecf25 100644 --- a/src/cowboy_router.erl +++ b/src/cowboy_router.erl @@ -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); |