diff options
-rw-r--r-- | src/cow_http.erl | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/cow_http.erl b/src/cow_http.erl index e79896b..f89e518 100644 --- a/src/cow_http.erl +++ b/src/cow_http.erl @@ -145,16 +145,32 @@ parse_hd_value(<< $\r, Rest/bits >>, Acc, Name, SoFar) -> << $\n, C, Rest2/bits >> when C =:= $\s; C =:= $\t -> parse_hd_value(Rest2, Acc, Name, << SoFar/binary, C >>); << $\n, Rest2/bits >> -> - parse_header(Rest2, [{Name, SoFar}|Acc]) + Value = clean_value_ws_end(SoFar, byte_size(SoFar) - 1), + parse_header(Rest2, [{Name, Value}|Acc]) end; parse_hd_value(<< C, Rest/bits >>, Acc, Name, SoFar) -> parse_hd_value(Rest, Acc, Name, << SoFar/binary, C >>). +%% This function has been copied from cowboy_http. +clean_value_ws_end(_, -1) -> + <<>>; +clean_value_ws_end(Value, N) -> + case binary:at(Value, N) of + $\s -> clean_value_ws_end(Value, N - 1); + $\t -> clean_value_ws_end(Value, N - 1); + _ -> + S = N + 1, + << Value2:S/binary, _/bits >> = Value, + Value2 + end. + -ifdef(TEST). parse_headers_test_() -> Tests = [ {<<"\r\nRest">>, {[], <<"Rest">>}}, + {<<"Server: Erlang/R17 \r\n\r\n">>, + {[{<<"server">>, <<"Erlang/R17">>}], <<>>}}, {<<"Server: Erlang/R17\r\n" "Date: Sun, 23 Feb 2014 09:30:39 GMT\r\n" "Multiline-Header: why hello!\r\n" |