Conversation
…order The flow-control accounting for a padded DATA frame counted the data and the padding but not the Pad Length byte, while RFC 9113 6.1 says the whole payload is flow controlled. The server's view of the receive window drifted by one byte per padded frame, and once the drift passed the WINDOW_UPDATE threshold the server saw an empty window that the client never refilled. A DATA frame arriving before the response HEADERS frame was delivered as a :data response with no preceding :status. RFC 9113 8.1 defines a response as HEADERS followed by DATA, and 8.1.1 makes a malformed response a stream error, so the stream is now reset with PROTOCOL_ERROR and the caller receives an error response.
Coverage Report for CI Build 5136294Coverage increased (+0.1%) to 88.833%Details
Uncovered Changes
Coverage RegressionsNo coverage regressions found. Coverage Stats
💛 - Coveralls |
A DATA, HEADERS or PUSH_PROMISE frame with the PADDED flag and an empty payload has no Pad Length field and is a FRAME_SIZE_ERROR (RFC 9113 6.1), a SETTINGS frame with the ACK flag and a payload is a FRAME_SIZE_ERROR (RFC 9113 6.5), and SETTINGS_ENABLE_PUSH is only valid as 0 or 1 and must not be set to 1 by a server (RFC 9113 6.5.2). All three used to be accepted.
…ames in header blocks PRIORITY frames on a client stream ID the client hadn't opened yet were treated as a connection error, but RFC 9113 5.1 allows PRIORITY on idle streams. They are now accepted. Extension frames received in the middle of a header block were ignored instead of being treated as the PROTOCOL_ERROR RFC 9113 5.5 requires.
ericmj
force-pushed
the
http2-frame-validation
branch
from
September 24, 2026 11:13
295d132 to
5136294
Compare
ericmj
marked this pull request as ready for review
September 24, 2026 11:15
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Frame-level validation fixes for
Mint.HTTP2. Each commit is one fix with its own tests, so this is meant to be rebase-merged rather than squashed.{:data, ref, _}with no:statusbefore it (RFC 9113 §8.1).Every commit's tests were run without its fix applied and fail there.