From e637c8440fac06f3e55195b48623e26e37cb6e7a Mon Sep 17 00:00:00 2001 From: Tim Brooks Date: Wed, 11 Sep 2024 15:02:52 -0600 Subject: [PATCH] Ensure http content copied for safe buffers Currently, unless a rest handler specifies that it handles "unsafe" buffers, we must copy the http buffers in releaseAndCopy. Unfortuantely, the original content was slipping through in the initial stream PR. This less to memory corruption on index and update requests which depend on buffers being copied. --- .../org/elasticsearch/http/netty4/Netty4HttpRequest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpRequest.java b/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpRequest.java index 56cbbe0265927..d5cf31d54fe82 100644 --- a/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpRequest.java +++ b/modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpRequest.java @@ -127,6 +127,12 @@ public HttpRequest releaseAndCopy() { } try { final ByteBuf copiedContent = Unpooled.copiedBuffer(request.content()); + HttpBody newContent; + if (content.isStream()) { + newContent = content; + } else { + newContent = Netty4Utils.fullHttpBodyFrom(copiedContent); + } return new Netty4HttpRequest( sequence, new DefaultFullHttpRequest( @@ -139,7 +145,7 @@ public HttpRequest releaseAndCopy() { ), new AtomicBoolean(false), false, - content + newContent ); } finally { release();