52 lines
2.4 KiB
Diff
52 lines
2.4 KiB
Diff
From b0fa4d5aab4215f3c22ce6123dd8dd5f38dc0432 Mon Sep 17 00:00:00 2001
|
|
From: Norman Maurer <norman_maurer@apple.com>
|
|
Date: Tue, 30 Mar 2021 09:40:47 +0200
|
|
Subject: [PATCH] Merge pull request from GHSA-f256-j965-7f32
|
|
|
|
Motivation:
|
|
|
|
We also need to ensure that all the header validation is done when a single header with the endStream flag is received
|
|
|
|
Modifications:
|
|
|
|
- Adjust code to always enforce the validation
|
|
- Add more unit tests
|
|
|
|
Result:
|
|
|
|
Always correctly validate
|
|
---
|
|
.../handler/codec/http2/DefaultHttp2ConnectionDecoder.java | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2ConnectionDecoder.java b/codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2ConnectionDecoder.java
|
|
index f04a0b5a69..097ac8cdad 100644
|
|
--- a/codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2ConnectionDecoder.java
|
|
+++ b/codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2ConnectionDecoder.java
|
|
@@ -300,10 +300,13 @@ public class DefaultHttp2ConnectionDecoder implements Http2ConnectionDecoder {
|
|
short weight, boolean exclusive, int padding, boolean endOfStream) throws Http2Exception {
|
|
Http2Stream stream = connection.stream(streamId);
|
|
boolean allowHalfClosedRemote = false;
|
|
+ boolean isTrailers = false;
|
|
if (stream == null && !connection.streamMayHaveExisted(streamId)) {
|
|
stream = connection.remote().createStream(streamId, endOfStream);
|
|
// Allow the state to be HALF_CLOSE_REMOTE if we're creating it in that state.
|
|
allowHalfClosedRemote = stream.state() == HALF_CLOSED_REMOTE;
|
|
+ } else if (stream != null) {
|
|
+ isTrailers = stream.isHeadersReceived();
|
|
}
|
|
|
|
if (shouldIgnoreHeadersOrDataFrame(ctx, streamId, stream, "HEADERS")) {
|
|
@@ -341,7 +344,7 @@ public class DefaultHttp2ConnectionDecoder implements Http2ConnectionDecoder {
|
|
stream.state());
|
|
}
|
|
|
|
- if (!stream.isHeadersReceived()) {
|
|
+ if (!isTrailers) {
|
|
// extract the content-length header
|
|
List<? extends CharSequence> contentLength = headers.getAll(HttpHeaderNames.CONTENT_LENGTH);
|
|
if (contentLength != null && !contentLength.isEmpty()) {
|
|
--
|
|
2.23.0
|
|
|