From 58b968b6036dc194dce5a3e70d05d493b2fb6b58 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Fri, 21 Jun 2013 16:38:37 +0200 Subject: [PATCH] [#1454] Fix IndexOutOfBoundsException which was thrown if last component of a CompositeByteBuf was removed --- .../java/io/netty/buffer/DefaultCompositeByteBuf.java | 4 ++++ .../io/netty/buffer/AbstractCompositeByteBufTest.java | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/buffer/src/main/java/io/netty/buffer/DefaultCompositeByteBuf.java b/buffer/src/main/java/io/netty/buffer/DefaultCompositeByteBuf.java index 960d5c5b87..05fcd86636 100644 --- a/buffer/src/main/java/io/netty/buffer/DefaultCompositeByteBuf.java +++ b/buffer/src/main/java/io/netty/buffer/DefaultCompositeByteBuf.java @@ -278,6 +278,10 @@ public class DefaultCompositeByteBuf extends AbstractReferenceCountedByteBuf imp } private void updateComponentOffsets(int cIndex) { + if (components.isEmpty()) { + return; + } + Component c = components.get(cIndex); if (cIndex == 0) { c.offset = 0; diff --git a/buffer/src/test/java/io/netty/buffer/AbstractCompositeByteBufTest.java b/buffer/src/test/java/io/netty/buffer/AbstractCompositeByteBufTest.java index 68fd19c4b3..c92c0da52c 100644 --- a/buffer/src/test/java/io/netty/buffer/AbstractCompositeByteBufTest.java +++ b/buffer/src/test/java/io/netty/buffer/AbstractCompositeByteBufTest.java @@ -24,6 +24,7 @@ import java.util.Collections; import java.util.List; import static io.netty.buffer.Unpooled.*; +import static io.netty.buffer.Unpooled.wrappedBuffer; import static io.netty.util.internal.EmptyArrays.*; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; @@ -543,4 +544,13 @@ public abstract class AbstractCompositeByteBufTest extends AbstractByteBufTest { assertThat(nioBuffers[1].remaining(), is(1)); assertThat(nioBuffers[1].get(), is((byte) 3)); } + + @Test + public void testRemoveLastComponent() { + CompositeByteBuf buf = freeLater(compositeBuffer()); + buf.addComponent(wrappedBuffer(new byte[]{1, 2})); + assertEquals(1, buf.numComponents()); + buf.removeComponent(0); + assertEquals(0, buf.numComponents()); + } }