From 8f5207e6ca28e58f4bde331a7e74034c83703a71 Mon Sep 17 00:00:00 2001 From: Ludovic Orban Date: Wed, 10 Jul 2024 16:52:51 +0200 Subject: [PATCH] Fix broken client tls negotiation (#11999) #11965 make EMPTY_BUFFER not read-only anymore Signed-off-by: Ludovic Orban --- .../jetty-io/src/main/java/org/eclipse/jetty/io/Content.java | 2 +- .../org/eclipse/jetty/quic/common/QuicStreamEndPoint.java | 3 +-- .../eclipse/jetty/server/NegotiatingServerConnection.java | 5 ++--- .../src/main/java/org/eclipse/jetty/util/BufferUtil.java | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/Content.java b/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/Content.java index e491e3e34bc..d622481f5ed 100644 --- a/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/Content.java +++ b/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/Content.java @@ -1024,7 +1024,7 @@ public class Content */ default Chunk asReadOnly() { - if (getByteBuffer().isReadOnly()) + if (!getByteBuffer().hasRemaining() || getByteBuffer().isReadOnly()) return this; if (canRetain()) return asChunk(getByteBuffer().asReadOnlyBuffer(), isLast(), this); diff --git a/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicStreamEndPoint.java b/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicStreamEndPoint.java index 227af953034..a86d7cd011c 100644 --- a/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicStreamEndPoint.java +++ b/jetty-core/jetty-quic/jetty-quic-common/src/main/java/org/eclipse/jetty/quic/common/QuicStreamEndPoint.java @@ -42,7 +42,6 @@ public class QuicStreamEndPoint extends AbstractEndPoint { private static final Logger LOG = LoggerFactory.getLogger(QuicStreamEndPoint.class); private static final ByteBuffer LAST_FLAG = ByteBuffer.allocate(0); - private static final ByteBuffer EMPTY_WRITABLE_BUFFER = ByteBuffer.allocate(0); private final QuicSession session; private final long streamId; @@ -272,7 +271,7 @@ public class QuicStreamEndPoint extends AbstractEndPoint // Check if the stream was finished normally. try { - fill(EMPTY_WRITABLE_BUFFER); + fill(BufferUtil.EMPTY_BUFFER); } catch (EOFException x) { diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/NegotiatingServerConnection.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/NegotiatingServerConnection.java index 038e02d48c3..59b1f6eb981 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/NegotiatingServerConnection.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/NegotiatingServerConnection.java @@ -14,7 +14,6 @@ package org.eclipse.jetty.server; import java.io.IOException; -import java.nio.ByteBuffer; import java.util.List; import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLEngineResult; @@ -22,13 +21,13 @@ import javax.net.ssl.SSLEngineResult; import org.eclipse.jetty.io.AbstractConnection; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.util.BufferUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class NegotiatingServerConnection extends AbstractConnection { private static final Logger LOG = LoggerFactory.getLogger(NegotiatingServerConnection.class); - private static final ByteBuffer EMPTY_WRITABLE_BUFFER = ByteBuffer.allocate(0); public interface CipherDiscriminator { @@ -145,7 +144,7 @@ public abstract class NegotiatingServerConnection extends AbstractConnection { try { - return getEndPoint().fill(EMPTY_WRITABLE_BUFFER); + return getEndPoint().fill(BufferUtil.EMPTY_BUFFER); } catch (IOException x) { diff --git a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/BufferUtil.java b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/BufferUtil.java index 82d39988bcd..39d22fb451e 100644 --- a/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/BufferUtil.java +++ b/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/BufferUtil.java @@ -107,7 +107,7 @@ public class BufferUtil }; public static final byte[] EMPTY_BYTES = new byte[0]; - public static final ByteBuffer EMPTY_BUFFER = ByteBuffer.wrap(EMPTY_BYTES).asReadOnlyBuffer(); + public static final ByteBuffer EMPTY_BUFFER = ByteBuffer.wrap(EMPTY_BYTES); /** * Allocate ByteBuffer in flush mode.