From fb113dce3a200005261020ce7fd02e2630b064ed Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Tue, 18 Apr 2017 06:44:44 +0200 Subject: [PATCH] HttpPostRequestEncoder may return a slice which is not retained. Motivation: We miss to retain a slice before return it to the user and so an reference count error may accour later on. Modifications: Use readRetainedSlice(...) and so ensure we retain the buffer before hand it of to the user. Result: Fixes [#6626]. --- .../handler/codec/http/multipart/HttpPostRequestEncoder.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java index ca0d8e7608..de0017b612 100755 --- a/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.java @@ -894,9 +894,7 @@ public class HttpPostRequestEncoder implements ChunkedInput { private ByteBuf fillByteBuf() { int length = currentBuffer.readableBytes(); if (length > HttpPostBodyUtil.chunkSize) { - ByteBuf slice = currentBuffer.slice(currentBuffer.readerIndex(), HttpPostBodyUtil.chunkSize); - currentBuffer.skipBytes(HttpPostBodyUtil.chunkSize); - return slice; + return currentBuffer.readRetainedSlice(HttpPostBodyUtil.chunkSize); } else { // to continue ByteBuf slice = currentBuffer;