Skip to content

GOAWAY frame filter is inverted #6

@phluid61

Description

@phluid61

File: lib/ruby-h2/http-agent.rb:551–563

After receiving GOAWAY, the case block allows DATA, HEADERS, PUSH_PROMISE, CONTINUATION, GZIPPED_DATA, and DROPPED_FRAME through for processing, but drops SETTINGS, PING, WINDOW_UPDATE, RST_STREAM, and PRIORITY via the else clause.

This is backwards:

  • SETTINGS must still be ACK'd for clean shutdown.
  • PING must still be PONG'd.
  • WINDOW_UPDATE must still be processed to drain in-flight data on already-open streams.
  • RST_STREAM for active streams should still be handled.

Meanwhile, DATA and HEADERS that pass through the filter hit internal return if @goaway checks or conditional emit guards, so they mostly no-op anyway.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions