Skip to content
This repository was archived by the owner on May 28, 2018. It is now read-only.

Commit f235f18

Browse files
committed
Netty container - JerseyChunkedInput must copy written bytes.
The buffers are reused by Jersey and output entities were corrupted when they reached certain size. Change-Id: I4c8ad8fd4e0b6e017cb55bc52ffd61252befdb25
1 parent ce5d952 commit f235f18

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

connectors/netty-connector/src/main/java/org/glassfish/jersey/netty/connector/internal/JerseyChunkedInput.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,21 +193,27 @@ public ByteBuffer get() {
193193
@Override
194194
public void write(final byte[] b) throws IOException {
195195

196+
final byte[] bytes = new byte[b.length];
197+
System.arraycopy(b, 0, bytes, 0, b.length);
198+
196199
write(new Provider<ByteBuffer>() {
197200
@Override
198201
public ByteBuffer get() {
199-
return ByteBuffer.wrap(b);
202+
return ByteBuffer.wrap(bytes);
200203
}
201204
});
202205
}
203206

204207
@Override
205208
public void write(final byte[] b, final int off, final int len) throws IOException {
206209

210+
final byte[] bytes = new byte[len];
211+
System.arraycopy(b, off, bytes, 0, len);
212+
207213
write(new Provider<ByteBuffer>() {
208214
@Override
209215
public ByteBuffer get() {
210-
return ByteBuffer.wrap(b, off, len);
216+
return ByteBuffer.wrap(bytes);
211217
}
212218
});
213219
}

containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/NettyHttp2ResponseWriter.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@
4747
import java.util.concurrent.ScheduledFuture;
4848
import java.util.concurrent.TimeUnit;
4949

50+
import org.glassfish.jersey.server.ContainerException;
51+
import org.glassfish.jersey.server.ContainerResponse;
52+
import org.glassfish.jersey.server.spi.ContainerResponseWriter;
53+
5054
import io.netty.buffer.ByteBuf;
5155
import io.netty.channel.ChannelFutureListener;
5256
import io.netty.channel.ChannelHandlerContext;
@@ -57,9 +61,6 @@
5761
import io.netty.handler.codec.http2.DefaultHttp2Headers;
5862
import io.netty.handler.codec.http2.DefaultHttp2HeadersFrame;
5963
import io.netty.handler.codec.http2.Http2HeadersFrame;
60-
import org.glassfish.jersey.server.ContainerException;
61-
import org.glassfish.jersey.server.ContainerResponse;
62-
import org.glassfish.jersey.server.spi.ContainerResponseWriter;
6364

6465
/**
6566
* Netty implementation of {@link ContainerResponseWriter}.
@@ -103,7 +104,8 @@ public OutputStream writeResponseStatusAndHeaders(long contentLength, ContainerR
103104

104105
ctx.writeAndFlush(new DefaultHttp2HeadersFrame(response));
105106

106-
if (!headersFrame.headers().method().equals(HttpMethod.HEAD.asciiName()) && (contentLength > 0 || contentLength == -1)) {
107+
if (!headersFrame.headers().method().equals(HttpMethod.HEAD.asciiName())
108+
&& (contentLength > 0 || contentLength == -1)) {
107109

108110
return new OutputStream() {
109111
@Override

0 commit comments

Comments
 (0)