This closes #32
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java b/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java
index 3aec96c..abbb40b 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java
@@ -213,6 +213,7 @@
(int)(currentArray[currentOffset++] & 0xFF) << 16 |
(int)(currentArray[currentOffset++] & 0xFF) << 8 |
(int)(currentArray[currentOffset++] & 0xFF) << 0;
+ maybeMoveToNextArray();
} else {
for (int i = INT_BYTES - 1; i >= 0; --i) {
result |= (int)(currentArray[currentOffset++] & 0xFF) << (i * Byte.SIZE);
@@ -242,6 +243,7 @@
(long)(currentArray[currentOffset++] & 0xFF) << 16 |
(long)(currentArray[currentOffset++] & 0xFF) << 8 |
(long)(currentArray[currentOffset++] & 0xFF) << 0;
+ maybeMoveToNextArray();
} else {
for (int i = LONG_BYTES - 1; i >= 0; --i) {
result |= (long)(currentArray[currentOffset++] & 0xFF) << (i * Byte.SIZE);
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java b/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java
index 28d5d17..9dc5c1b 100644
--- a/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java
+++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java
@@ -3027,6 +3027,31 @@
}
@Test
+ public void testPositionMovedOnArrayBounderies() {
+ CompositeReadableBuffer buffer = new CompositeReadableBuffer();
+
+ buffer.append(new byte[] { 1, 2, 3, 4 });
+ buffer.append(new byte[] { 5, 6 });
+ buffer.append(new byte[] { 7, 8, 9, 10, 11, 12, 13, 14 });
+ buffer.append(new byte[] { 15 });
+
+ buffer.getInt();
+ assertEquals(5, buffer.get(4));
+ buffer.get();
+ buffer.get();
+ buffer.getLong();
+ assertEquals(15, buffer.get(14));
+ assertEquals(15, buffer.get(14));
+
+ try {
+ buffer.get(15);
+ } catch (IndexOutOfBoundsException aiobe) {}
+
+ buffer.position(4);
+ assertEquals(5, buffer.get(4));
+ }
+
+ @Test
public void testSliceRefusesAppends() {
CompositeReadableBuffer buffer = new CompositeReadableBuffer();
buffer.append(new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});