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();