PROTON-1672 Fix issue when PN_TRACE_FRM is enabled
During tracing if frame is larger than max frame size an
IndexOutOfBoundsException is thrown if buffer slicing not done properly.
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 fee963a..388d140 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
@@ -723,6 +723,21 @@
return true;
}
+ @Override
+ public String toString() {
+ StringBuffer builder = new StringBuffer();
+ builder.append("CompositeReadableBuffer");
+ builder.append("{ pos=");
+ builder.append(position());
+ builder.append(" limit=");
+ builder.append(limit());
+ builder.append(" capacity=");
+ builder.append(capacity());
+ builder.append(" }");
+
+ return builder.toString();
+ }
+
private static boolean equals(byte x, byte y) {
return x == y;
}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter.java
index abf4ba9..bfda8ab 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter.java
@@ -193,8 +193,8 @@
ReadableBuffer originalPayload = null;
if (payload!=null)
{
- originalPayload = payload.duplicate();
- originalPayload.limit(payload.position() + payloadSize);
+ originalPayload = payload.slice();
+ originalPayload.limit(payloadSize);
}
Binary payloadBin = Binary.create(originalPayload);