summerwind/h2spec

http2/ 4.2.3 doesn't make big enough headers

ioquatix opened this issue · 0 comments

I've been testing this on my server:

Here are the settings which are pending when the connection is open, note the maximum frame size is extended:

 @current=
  #<Protocol::HTTP2::Settings:0x00007fc2a21985e0
   @enable_connect_protocol=0,
   @enable_push=1,
   @header_table_size=4096,
   @initial_window_size=65535,
   @maximum_concurrent_streams=4294967295,
   @maximum_frame_size=16384,
   @maximum_header_list_size=4294967295>,
 @pending=
  #<Protocol::HTTP2::Settings:0x00007fc2a2198540
   @enable_connect_protocol=0,
   @enable_push=1,
   @header_table_size=4096,
   @initial_window_size=2147483647,
   @maximum_concurrent_streams=32,
   @maximum_frame_size=1048576,
   @maximum_header_list_size=4294967295>,
 @queue=[{3=>32, 5=>1048576, 4=>2147483647, 8=>1}]>

The h2spec client sends an Settings acknowlegement frame

framer: read_frame Protocol::HTTP2::SettingsFrame 0 (16384)
true -> []

So because of that, the maximum frame size is now 1048576. The next frame is not big enough to trigger the desired failure:

framer: read_frame Protocol::HTTP2::HeadersFrame 17575 (max=1048576)

      × 3: Sends a large size HEADERS frame that exceeds the SETTINGS_MAX_FRAME_SIZE
        -> The endpoint MUST respond with a connection error of type FRAME_SIZE_ERROR.
           Expected: GOAWAY Frame (Error Code: FRAME_SIZE_ERROR)