Fix memory leak in HttpPostMultipartRequestDecoder (#10227)
Motivation: We need to release all ByteBufs that we allocate to prevent leaks. We missed to release the ByteBufs that are used to aggregate in two cases Modifications: Add release() calls Result: No more memory leak in HttpPostMultipartRequestDecoder
This commit is contained in:
parent
7b56aabec6
commit
65a967c772
@ -973,9 +973,8 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
|
|||||||
*/
|
*/
|
||||||
private static String readLineStandard(ByteBuf undecodedChunk, Charset charset) {
|
private static String readLineStandard(ByteBuf undecodedChunk, Charset charset) {
|
||||||
int readerIndex = undecodedChunk.readerIndex();
|
int readerIndex = undecodedChunk.readerIndex();
|
||||||
|
ByteBuf line = buffer(64);
|
||||||
try {
|
try {
|
||||||
ByteBuf line = buffer(64);
|
|
||||||
|
|
||||||
while (undecodedChunk.isReadable()) {
|
while (undecodedChunk.isReadable()) {
|
||||||
byte nextByte = undecodedChunk.readByte();
|
byte nextByte = undecodedChunk.readByte();
|
||||||
if (nextByte == HttpConstants.CR) {
|
if (nextByte == HttpConstants.CR) {
|
||||||
@ -998,6 +997,8 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
|
|||||||
} catch (IndexOutOfBoundsException e) {
|
} catch (IndexOutOfBoundsException e) {
|
||||||
undecodedChunk.readerIndex(readerIndex);
|
undecodedChunk.readerIndex(readerIndex);
|
||||||
throw new NotEnoughDataDecoderException(e);
|
throw new NotEnoughDataDecoderException(e);
|
||||||
|
} finally {
|
||||||
|
line.release();
|
||||||
}
|
}
|
||||||
undecodedChunk.readerIndex(readerIndex);
|
undecodedChunk.readerIndex(readerIndex);
|
||||||
throw new NotEnoughDataDecoderException();
|
throw new NotEnoughDataDecoderException();
|
||||||
@ -1017,9 +1018,8 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
|
|||||||
}
|
}
|
||||||
SeekAheadOptimize sao = new SeekAheadOptimize(undecodedChunk);
|
SeekAheadOptimize sao = new SeekAheadOptimize(undecodedChunk);
|
||||||
int readerIndex = undecodedChunk.readerIndex();
|
int readerIndex = undecodedChunk.readerIndex();
|
||||||
|
ByteBuf line = buffer(64);
|
||||||
try {
|
try {
|
||||||
ByteBuf line = buffer(64);
|
|
||||||
|
|
||||||
while (sao.pos < sao.limit) {
|
while (sao.pos < sao.limit) {
|
||||||
byte nextByte = sao.bytes[sao.pos++];
|
byte nextByte = sao.bytes[sao.pos++];
|
||||||
if (nextByte == HttpConstants.CR) {
|
if (nextByte == HttpConstants.CR) {
|
||||||
@ -1046,6 +1046,8 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
|
|||||||
} catch (IndexOutOfBoundsException e) {
|
} catch (IndexOutOfBoundsException e) {
|
||||||
undecodedChunk.readerIndex(readerIndex);
|
undecodedChunk.readerIndex(readerIndex);
|
||||||
throw new NotEnoughDataDecoderException(e);
|
throw new NotEnoughDataDecoderException(e);
|
||||||
|
} finally {
|
||||||
|
line.release();
|
||||||
}
|
}
|
||||||
undecodedChunk.readerIndex(readerIndex);
|
undecodedChunk.readerIndex(readerIndex);
|
||||||
throw new NotEnoughDataDecoderException();
|
throw new NotEnoughDataDecoderException();
|
||||||
|
Loading…
Reference in New Issue
Block a user