Skip to content

Commit

Permalink
Fix: ignore unknown settings frame
Browse files Browse the repository at this point in the history
  • Loading branch information
tony612 committed Jul 22, 2017
1 parent 4ff2602 commit 48f0543
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/h2_frame_settings.erl
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ parse_settings(<<0,5,Val:4/binary,T/binary>>, S) ->
parse_settings(T, [{?SETTINGS_MAX_FRAME_SIZE, binary:decode_unsigned(Val)}|S]);
parse_settings(<<0,6,Val:4/binary,T/binary>>, S)->
parse_settings(T, [{?SETTINGS_MAX_HEADER_LIST_SIZE, binary:decode_unsigned(Val)}|S]);
parse_settings(<<_:6/binary,T/binary>>, S)->
parse_settings(T, S);
parse_settings(<<>>, Settings) ->
Settings.

Expand Down
16 changes: 16 additions & 0 deletions test/http2_spec_6_5_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
all() ->
[
sends_invalid_push_setting,
sends_unknown_settings_frame,
sends_value_above_max_flow_control_window_size,
sends_max_frame_size_too_small,
sends_max_frame_size_too_big
Expand Down Expand Up @@ -37,6 +38,21 @@ sends_invalid_push_setting(_Config) ->
?assertEqual(?PROTOCOL_ERROR, (h2_frame_goaway:error_code(GoAway))),
ok.

sends_unknown_settings_frame(_Config) ->
{ok, Client} = http2c:start_link(),

Bin = <<16#00,16#00,16#06,16#04,16#00,16#00,16#00,16#00,16#00,
16#254,16#03,16#00,16#00,16#00,16#01>>,
http2c:send_binary(Client, Bin),

Resp = http2c:wait_for_n_frames(Client, 0, 1),
ct:pal("Resp: ~p", [Resp]),
?assertEqual(1, (length(Resp))),
[{Header, Payload}] = Resp,
?assertEqual(?SETTINGS, (Header#frame_header.type)),
?assertEqual({settings, []}, (Payload)),
ok.

sends_value_above_max_flow_control_window_size(_Config) ->
{ok, Client} = http2c:start_link(),
Bin = <<16#00,16#00,16#06,16#04,16#00,16#00,16#00,16#00,16#00,
Expand Down

0 comments on commit 48f0543

Please sign in to comment.