Skip to content

incorrect handling of large HEADERS frame #2252

@marten-seemann

Description

@marten-seemann

When the client exceeds the SETTINGS_MAX_FIELD_SECTION_SIZE, quiche closes the connection (!) with a H3_EXCESSIVE_LOAD error.

RFC 9114, Section 4.2.2 explains that the client might not have learned about the limit if the request goes through intermediaries, so exceeding the size is not necessarily a protocol violation.

If an implementation wishes to advise its peer of this limit, it can be conveyed as a number of bytes in the SETTINGS_MAX_FIELD_SECTION_SIZE parameter. An implementation that has received this parameter SHOULD NOT send an HTTP message header that exceeds the indicated size, as the peer will likely refuse to process it. However, an HTTP message can traverse one or more intermediaries before reaching the origin server; see Section 3.7 of HTTP. Because this limit is applied separately by each implementation that processes the message, messages below this limit are not guaranteed to be accepted.

Instead of closing the connection, quiche should probably just send a 431 status (and sending a STOP_SENDING for the stream). The RFC doesn't specify the reset error code, but I think both H3_EXCESSIVE_LOAD or H3_REQUEST_REJECTED would be appropriate.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions