diff options
author | Zandra <[email protected]> | 2015-11-20 10:17:10 +0100 |
---|---|---|
committer | Zandra <[email protected]> | 2015-11-20 10:17:10 +0100 |
commit | 00db647274f87aa87f4bb7245fc95a1effe72466 (patch) | |
tree | 9e19c4f3b11d9e38e1ed30b8d35e231f8aa5a2ec /lib/inets | |
parent | b5e4c4533ed5e407804b825ecab65164161a0060 (diff) | |
parent | 56025e23118f69b8d1b87b0478a93499752360cb (diff) | |
download | otp-00db647274f87aa87f4bb7245fc95a1effe72466.tar.gz otp-00db647274f87aa87f4bb7245fc95a1effe72466.tar.bz2 otp-00db647274f87aa87f4bb7245fc95a1effe72466.zip |
Merge branch 'weisslj/allow-whitespace-after-chunk-size' into maint
* weisslj/allow-whitespace-after-chunk-size:
inets: Allow whitespace after HTTP chunk again
OTP-13116
Diffstat (limited to 'lib/inets')
-rw-r--r-- | lib/inets/src/http_lib/http_chunk.erl | 2 | ||||
-rw-r--r-- | lib/inets/test/http_format_SUITE.erl | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/lib/inets/src/http_lib/http_chunk.erl b/lib/inets/src/http_lib/http_chunk.erl index 2f8476a49d..9699856bf8 100644 --- a/lib/inets/src/http_lib/http_chunk.erl +++ b/lib/inets/src/http_lib/http_chunk.erl @@ -147,7 +147,7 @@ decode_size(Data = <<?CR, ?LF, ChunkRest/binary>>, HexList, AccHeaderSize, {MaxBodySize, Body, AccLength, MaxHeaderSize}) -> - try http_util:hexlist_to_integer(lists:reverse(HexList)) of + try http_util:hexlist_to_integer(lists:reverse(string:strip(HexList, left))) of 0 -> % Last chunk, there was no data ignore_extensions(Data, remaing_size(MaxHeaderSize, AccHeaderSize), MaxHeaderSize, {?MODULE, decode_trailer, diff --git a/lib/inets/test/http_format_SUITE.erl b/lib/inets/test/http_format_SUITE.erl index a927adc75e..e977bd1b9b 100644 --- a/lib/inets/test/http_format_SUITE.erl +++ b/lib/inets/test/http_format_SUITE.erl @@ -38,6 +38,7 @@ groups() -> [chunk_decode, chunk_encode, chunk_extensions_otp_6005, chunk_decode_otp_6264, chunk_decode_empty_chunk_otp_6511, + chunk_whitespace_suffix, chunk_decode_trailer, chunk_max_headersize, chunk_max_bodysize, chunk_not_hex]}]. init_per_suite(Config) -> @@ -157,6 +158,21 @@ chunk_decode_empty_chunk_otp_6511(Config) when is_list(Config) -> ?HTTP_MAX_BODY_SIZE, ?HTTP_MAX_HEADER_SIZE). %%------------------------------------------------------------------------- +chunk_whitespace_suffix() -> + [{doc, "Test whitespace after chunked length header"}]. +chunk_whitespace_suffix(Config) when is_list(Config) -> + ChunkedBody = "1a ; ignore-stuff-here" ++ ?CRLF ++ + "abcdefghijklmnopqrstuvwxyz" ++ ?CRLF ++ "10 " ++ ?CRLF + ++ "1234567890abcdef" ++ ?CRLF ++ "0 " ++ ?CRLF + ++ "some-footer:some-value" ++ ?CRLF + ++ "another-footer:another-value" ++ ?CRLF ++ ?CRLF, + {ok, {["content-length:42", "another-footer:another-value", + "some-footer:some-value", ""], + <<"abcdefghijklmnopqrstuvwxyz1234567890abcdef">>}} = + http_chunk:decode(list_to_binary(ChunkedBody), + ?HTTP_MAX_BODY_SIZE, ?HTTP_MAX_HEADER_SIZE). + +%%------------------------------------------------------------------------- chunk_decode_trailer() -> [{doc,"Make sure trailers are handled correctly. Trailers should" "become new headers"}]. |