From 7c18d9f9656b4815d91edc6bfc172c025af1df0d Mon Sep 17 00:00:00 2001 From: Steve Hawkins Date: Tue, 18 Oct 2022 10:57:29 -0400 Subject: [PATCH] fix #4201: jetty's bytebuffers may be immediately re-used --- .../client/jetty/JettyAsyncResponseListener.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/httpclient-jetty/src/main/java/io/fabric8/kubernetes/client/jetty/JettyAsyncResponseListener.java b/httpclient-jetty/src/main/java/io/fabric8/kubernetes/client/jetty/JettyAsyncResponseListener.java index 2ee8ad50c0c..ba09dc235ee 100644 --- a/httpclient-jetty/src/main/java/io/fabric8/kubernetes/client/jetty/JettyAsyncResponseListener.java +++ b/httpclient-jetty/src/main/java/io/fabric8/kubernetes/client/jetty/JettyAsyncResponseListener.java @@ -94,7 +94,8 @@ public void onContent(Response response, LongConsumer demand, ByteBuffer content this.demand.complete(demand); } try { - bodyConsumer.consume(process(response, content), this); + // we must clone as the buffer can be reused after the call to succeeded + bodyConsumer.consume(process(response, clone(content)), this); callback.succeeded(); } catch (Exception e) { callback.failed(e); @@ -102,4 +103,11 @@ public void onContent(Response response, LongConsumer demand, ByteBuffer content } protected abstract T process(Response response, ByteBuffer content); + + public static ByteBuffer clone(ByteBuffer original) { + ByteBuffer clone = ByteBuffer.allocate(original.remaining()); + clone.put(original); + clone.flip(); + return clone; + } }