FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Auto-port 4.1: HTTP: Preserve encoder state after header encoding failures by netty-project-bot · Pull Request #17275 · netty/netty · GitHub

Repository navigation

Auto-port 4.1: HTTP: Preserve encoder state after header encoding failures - #17275

Merged
normanmaurer merged 1 commit into
4.1from
auto-port-pr-17271-to-4.1
Aug 13, 2026
Merged

normanmaurer merged 1 commit into
4.1from
auto-port-pr-17271-to-4.1

Conversation

Copy link
Copy Markdown
Contributor

Auto-port of #17271 to 4.1
Cherry-picked commit: dd7c9dc


Motivation:

encodeInitHttpMessage() updated the encoder state before running header sanitization and encoding. If either step threw, the allocated buffer was released but the encoder remained in a content state even though no output had been produced. A subsequent valid response was then rejected with unexpected message type.

This can be reproduced without a fatal error by encoding a 204 No Content response backed by ReadOnlyHttpHeaders. Sanitization fails with UnsupportedOperationException, and the next response fails because the encoder is still in state 3.

#17089 made the header buffer exception-safe, but its regression test ended the channel immediately after the failure and did not exercise another response.

Modification:

  • Compute the next content state in a local variable.
  • Commit it to the encoder only after header sanitization and encoding complete successfully.
  • Add a regression test for a sanitization failure and extend the existing header encoding failure test to verify that a valid response can still be encoded afterward.

Result:

An initial-message header failure no longer leaves the encoder unusable. Successful encoding and wire output are unchanged.

Verification:

./mvnw -pl codec-http test

8,982 tests run, 0 failures, 0 errors, 4 skipped.

Motivation:

`encodeInitHttpMessage()` updated the encoder state before running
header sanitization and encoding. If either step threw, the allocated
buffer was released but the encoder remained in a content state even
though no output had been produced. A subsequent valid response was then
rejected with `unexpected message type`.

This can be reproduced without a fatal error by encoding a `204 No
Content` response backed by `ReadOnlyHttpHeaders`. Sanitization fails
with `UnsupportedOperationException`, and the next response fails
because the encoder is still in state 3.

#17089 made the header buffer exception-safe, but its regression test
ended the channel immediately after the failure and did not exercise
another response.

Modification:

- Compute the next content state in a local variable.
- Commit it to the encoder only after header sanitization and encoding
complete successfully.
- Add a regression test for a sanitization failure and extend the
existing header encoding failure test to verify that a valid response
can still be encoded afterward.

Result:

An initial-message header failure no longer leaves the encoder unusable.
Successful encoding and wire output are unchanged.

Verification:

`./mvnw -pl codec-http test`

8,982 tests run, 0 failures, 0 errors, 4 skipped.

(cherry picked from commit dd7c9dc)

testlens-app Bot commented Aug 12, 2026 •
edited
Loading

Copy link
Copy Markdown

✅ All tests passed ✅

🏷️ Commit: 22be366
▶️ Tests: 353000 executed
⚪️ Checks: 18/18 completed


Learn more about TestLens at testlens.app.

normanmaurer merged commit 8f0d72d into 4.1 Aug 13, 2026
18 of 19 checks passed
normanmaurer deleted the auto-port-pr-17271-to-4.1 branch August 13, 2026 08:38
normanmaurer added this to the 4.1.138.Final milestone Aug 13, 2026
lltopk pushed a commit to lltopk/netty that referenced this pull request Oct 24, 2026
…lures (netty#17275)

Auto-port of netty#17271 to 4.1
Cherry-picked commit: dd7c9dc

---
Motivation:

`encodeInitHttpMessage()` updated the encoder state before running
header sanitization and encoding. If either step threw, the allocated
buffer was released but the encoder remained in a content state even
though no output had been produced. A subsequent valid response was then
rejected with `unexpected message type`.

This can be reproduced without a fatal error by encoding a `204 No
Content` response backed by `ReadOnlyHttpHeaders`. Sanitization fails
with `UnsupportedOperationException`, and the next response fails
because the encoder is still in state 3.

netty#17089 made the header buffer exception-safe, but its regression test
ended the channel immediately after the failure and did not exercise
another response.

Modification:

- Compute the next content state in a local variable.
- Commit it to the encoder only after header sanitization and encoding
complete successfully.
- Add a regression test for a sanitization failure and extend the
existing header encoding failure test to verify that a valid response
can still be encoded afterward.

Result:

An initial-message header failure no longer leaves the encoder unusable.
Successful encoding and wire output are unchanged.

Verification:

`./mvnw -pl codec-http test`

8,982 tests run, 0 failures, 0 errors, 4 skipped.

Co-authored-by: Gimin Kim <138752849+Gimini-3@users.noreply.github.com>
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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants


Back | FazBrowse Home | New Git URL