PROTON-1906: avoid potential NPE when duplicating composite buffer
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 01654aa..c614e39 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
@@ -66,7 +66,9 @@
private CompositeReadableBuffer(byte[] array, int offset) {
this.currentArray = array;
this.currentOffset = offset;
- this.capacity = array.length;
+ if(array != null) {
+ this.capacity = array.length;
+ }
this.limit = capacity;
}
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 85e0517..86ee4ab 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
@@ -2786,6 +2786,27 @@
//----- Test various cases of Duplicate ----------------------------------//
@Test
+ public void testDuplicateOnEmptyBuffer() {
+ CompositeReadableBuffer buffer = new CompositeReadableBuffer();
+ CompositeReadableBuffer dup = buffer.duplicate();
+
+ assertNotSame(buffer, dup);
+ assertEquals(0, dup.capacity());
+ assertEquals(0, buffer.capacity());
+ assertEquals(0, dup.position());
+ assertEquals(0, buffer.position());
+ assertEquals(0, dup.limit());
+ assertEquals(0, buffer.limit());
+ assertContentEquals(buffer, dup);
+
+ try {
+ dup.reclaimRead();
+ } catch (Throwable t) {
+ fail("Compacting an empty duplicate should not fail");
+ }
+ }
+
+ @Test
public void testDuplicateWithSingleArrayContent() {
CompositeReadableBuffer buffer = new CompositeReadableBuffer();