PROTON-1906: avoid potential NPE when duplicating composite buffer

(cherry picked from commit 6b7750775bf57d05f9a8f29d79e7fc3e38a8d0a1)
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 3780668..2c05e5f 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 4daef3e..2c41e7f 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
@@ -1763,6 +1763,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();