diff --git a/build-tools-internal/version.properties b/build-tools-internal/version.properties
index ee7ec6432ce5d..52d35373aaf82 100644
--- a/build-tools-internal/version.properties
+++ b/build-tools-internal/version.properties
@@ -14,7 +14,7 @@ log4j = 2.19.0
slf4j = 2.0.6
ecsLogging = 1.2.0
jna = 5.12.1
-netty = 4.1.118.Final
+netty = 4.1.126.Final
commons_lang3 = 3.9
google_oauth_client = 1.34.1
awsv2sdk = 2.31.78
diff --git a/docs/changelog/134182.yaml b/docs/changelog/134182.yaml
new file mode 100644
index 0000000000000..4ec8a96a8ccc9
--- /dev/null
+++ b/docs/changelog/134182.yaml
@@ -0,0 +1,5 @@
+pr: 134182
+summary: Upgrade Netty to 4.1.126.Final
+area: Network
+type: upgrade
+issues: []
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 55f5012394667..a03e59c039bed 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -1594,74 +1594,74 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
diff --git a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/transport/netty4/SecurityNetty4HttpServerTransportTests.java b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/transport/netty4/SecurityNetty4HttpServerTransportTests.java
index 46003934db545..9d262489ff108 100644
--- a/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/transport/netty4/SecurityNetty4HttpServerTransportTests.java
+++ b/x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/transport/netty4/SecurityNetty4HttpServerTransportTests.java
@@ -587,9 +587,8 @@ public void dispatchBadRequest(final RestChannel channel, final ThreadContext th
{
EmbeddedChannel ch = new EmbeddedChannel(handler);
ByteBuf buf = ch.alloc().buffer();
- ByteBufUtil.copy(AsciiString.of("This is not a valid HTTP line"), buf);
- buf.writeByte(HttpConstants.LF);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("This is not a valid HTTP line", buf);
+ appendCrLf(buf);
ch.writeInbound(buf);
ch.flushInbound();
assertThat(dispatchThrowableReference.get().toString(), containsString("NOT A VALID HTTP LINE"));
@@ -600,9 +599,8 @@ public void dispatchBadRequest(final RestChannel channel, final ThreadContext th
{
EmbeddedChannel ch = new EmbeddedChannel(handler);
ByteBuf buf = ch.alloc().buffer();
- ByteBufUtil.copy(AsciiString.of("GET /this/is/a/valid/but/too/long/initial/line HTTP/1.1"), buf);
- buf.writeByte(HttpConstants.LF);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("GET /this/is/a/valid/but/too/long/initial/line HTTP/1.1", buf);
+ appendCrLf(buf);
ch.writeInbound(buf);
ch.flushInbound();
assertThat(dispatchThrowableReference.get().toString(), containsString("HTTP line is larger than"));
@@ -613,11 +611,9 @@ public void dispatchBadRequest(final RestChannel channel, final ThreadContext th
{
EmbeddedChannel ch = new EmbeddedChannel(handler);
ByteBuf buf = ch.alloc().buffer();
- ByteBufUtil.copy(AsciiString.of("GET /url HTTP/1.1"), buf);
- buf.writeByte(HttpConstants.LF);
- ByteBufUtil.copy(AsciiString.of("Host"), buf);
- buf.writeByte(HttpConstants.LF);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("GET /url HTTP/1.1", buf);
+ appendAsciiLine("Host", buf);
+ appendCrLf(buf);
ch.writeInbound(buf);
ch.flushInbound();
assertThat(dispatchThrowableReference.get().toString(), containsString("No colon found"));
@@ -628,11 +624,9 @@ public void dispatchBadRequest(final RestChannel channel, final ThreadContext th
{
EmbeddedChannel ch = new EmbeddedChannel(handler);
ByteBuf buf = ch.alloc().buffer();
- ByteBufUtil.copy(AsciiString.of("GET /url HTTP/1.1"), buf);
- buf.writeByte(HttpConstants.LF);
- ByteBufUtil.copy(AsciiString.of("Host: this.looks.like.a.good.url.but.is.longer.than.permitted"), buf);
- buf.writeByte(HttpConstants.LF);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("GET /url HTTP/1.1", buf);
+ appendAsciiLine("Host: this.looks.like.a.good.url.but.is.longer.than.permitted", buf);
+ appendCrLf(buf);
ch.writeInbound(buf);
ch.flushInbound();
assertThat(dispatchThrowableReference.get().toString(), containsString("HTTP header is larger than"));
@@ -643,12 +637,11 @@ public void dispatchBadRequest(final RestChannel channel, final ThreadContext th
{
EmbeddedChannel ch = new EmbeddedChannel(handler);
ByteBuf buf = ch.alloc().buffer();
- ByteBufUtil.copy(AsciiString.of("GET /url HTTP/1.1"), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("GET /url HTTP/1.1", buf);
ByteBufUtil.copy(AsciiString.of("Host: invalid header value"), buf);
buf.writeByte(0x01);
- buf.writeByte(HttpConstants.LF);
- buf.writeByte(HttpConstants.LF);
+ appendCrLf(buf);
+ appendCrLf(buf);
ch.writeInbound(buf);
ch.flushInbound();
assertThat(dispatchThrowableReference.get().toString(), containsString("Validation failed for header 'Host'"));
@@ -659,10 +652,8 @@ public void dispatchBadRequest(final RestChannel channel, final ThreadContext th
{
EmbeddedChannel ch = new EmbeddedChannel(handler);
ByteBuf buf = ch.alloc().buffer();
- ByteBufUtil.copy(AsciiString.of("GET /url HTTP/1.1"), buf);
- buf.writeByte(HttpConstants.LF);
- ByteBufUtil.copy(AsciiString.of("Host: localhost"), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("GET /url HTTP/1.1", buf);
+ appendAsciiLine("Host: localhost", buf);
ch.writeInbound(buf);
ch.flushInbound();
safeGet(ch.close());
@@ -716,33 +707,24 @@ public void dispatchBadRequest(final RestChannel channel, final ThreadContext th
// OPTIONS request with fixed length content written in one chunk
{
ByteBuf buf = ch.alloc().buffer();
- ByteBufUtil.copy(AsciiString.of("OPTIONS /url/whatever/fixed-length-single-chunk HTTP/1.1"), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("OPTIONS /url/whatever/fixed-length-single-chunk HTTP/1.1", buf);
if (randomBoolean()) {
- ByteBufUtil.copy(AsciiString.of("Host: localhost"), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("Host: localhost", buf);
}
if (randomBoolean()) {
- ByteBufUtil.copy(AsciiString.of("Accept: */*"), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("Accept: */*", buf);
}
if (randomBoolean()) {
- ByteBufUtil.copy(AsciiString.of("Content-Encoding: gzip"), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("Content-Encoding: gzip", buf);
}
if (randomBoolean()) {
- ByteBufUtil.copy(
- AsciiString.of("Content-Type: " + randomFrom("text/plain; charset=utf-8", "application/json; charset=utf-8")),
- buf
- );
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("Content-Type: " + randomFrom("text/plain; charset=utf-8", "application/json; charset=utf-8"), buf);
}
String content = randomAlphaOfLengthBetween(4, 1024);
// having a "Content-Length" request header is what makes it "fixed length"
- ByteBufUtil.copy(AsciiString.of("Content-Length: " + content.length()), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("Content-Length: " + content.length(), buf);
// end of headers
- buf.writeByte(HttpConstants.LF);
+ appendCrLf(buf);
ByteBufUtil.copy(AsciiString.of(content), buf);
// write everything in one single chunk
ch.writeInbound(buf);
@@ -759,63 +741,44 @@ public void dispatchBadRequest(final RestChannel channel, final ThreadContext th
}
{
ByteBuf buf = ch.alloc().buffer();
- ByteBufUtil.copy(AsciiString.of("OPTIONS /url/whatever/chunked-transfer?encoding HTTP/1.1"), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("OPTIONS /url/whatever/chunked-transfer?encoding HTTP/1.1", buf);
if (randomBoolean()) {
- ByteBufUtil.copy(AsciiString.of("Host: localhost"), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("Host: localhost", buf);
}
if (randomBoolean()) {
- ByteBufUtil.copy(AsciiString.of("Accept: */*"), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("Accept: */*", buf);
}
if (randomBoolean()) {
- ByteBufUtil.copy(AsciiString.of("Content-Encoding: gzip"), buf);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("Content-Encoding: gzip", buf);
}
if (randomBoolean()) {
- ByteBufUtil.copy(
- AsciiString.of("Content-Type: " + randomFrom("text/plain; charset=utf-8", "application/json; charset=utf-8")),
- buf
- );
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine("Content-Type: " + randomFrom("text/plain; charset=utf-8", "application/json; charset=utf-8"), buf);
}
// do not write a "Content-Length" header to make the request "variable length"
if (randomBoolean()) {
- ByteBufUtil.copy(AsciiString.of("Transfer-Encoding: " + randomFrom("chunked", "gzip, chunked")), buf);
+ appendAsciiLine("Transfer-Encoding: " + randomFrom("chunked", "gzip, chunked"), buf);
} else {
- ByteBufUtil.copy(AsciiString.of("Transfer-Encoding: chunked"), buf);
+ appendAsciiLine("Transfer-Encoding: chunked", buf);
}
- buf.writeByte(HttpConstants.LF);
- buf.writeByte(HttpConstants.LF);
+ // End of headers
+ appendCrLf(buf);
// maybe append some chunks as well
String[] contentParts = randomArray(0, 4, String[]::new, () -> randomAlphaOfLengthBetween(1, 64));
for (String content : contentParts) {
- ByteBufUtil.copy(AsciiString.of(Integer.toHexString(content.length())), buf);
- buf.writeByte(HttpConstants.CR);
- buf.writeByte(HttpConstants.LF);
- ByteBufUtil.copy(AsciiString.of(content), buf);
- buf.writeByte(HttpConstants.CR);
- buf.writeByte(HttpConstants.LF);
+ appendAsciiLine(Integer.toHexString(content.length()), buf);
+ appendAsciiLine(content, buf);
}
ch.writeInbound(buf);
ch.flushInbound();
ByteBuf buf2 = ch.alloc().buffer();
contentParts = randomArray(1, 4, String[]::new, () -> randomAlphaOfLengthBetween(1, 64));
for (String content : contentParts) {
- ByteBufUtil.copy(AsciiString.of(Integer.toHexString(content.length())), buf2);
- buf2.writeByte(HttpConstants.CR);
- buf2.writeByte(HttpConstants.LF);
- ByteBufUtil.copy(AsciiString.of(content), buf2);
- buf2.writeByte(HttpConstants.CR);
- buf2.writeByte(HttpConstants.LF);
+ appendAsciiLine(Integer.toHexString(content.length()), buf2);
+ appendAsciiLine(content, buf2);
}
// finish chunked request
- ByteBufUtil.copy(AsciiString.of("0"), buf2);
- buf2.writeByte(HttpConstants.CR);
- buf2.writeByte(HttpConstants.LF);
- buf2.writeByte(HttpConstants.CR);
- buf2.writeByte(HttpConstants.LF);
+ appendAsciiLine("0", buf2);
+ appendCrLf(buf2);
ch.writeInbound(buf2);
ch.flushInbound();
ch.runPendingTasks();
@@ -834,4 +797,24 @@ public void dispatchBadRequest(final RestChannel channel, final ThreadContext th
}
}
+ /**
+ * Append a string as ASCII terminated by a CR/LF newline
+ *
+ * @param string The string to append
+ * @param buf The buffer to append to
+ */
+ private static void appendAsciiLine(String string, ByteBuf buf) {
+ ByteBufUtil.copy(AsciiString.of(string), buf);
+ appendCrLf(buf);
+ }
+
+ /**
+ * Append a CR/LF newline
+ *
+ * @param buf The buffer to append to
+ */
+ private static void appendCrLf(ByteBuf buf) {
+ buf.writeByte(HttpConstants.CR);
+ buf.writeByte(HttpConstants.LF);
+ }
}