-
Notifications
You must be signed in to change notification settings - Fork 321
Closed
Description
The following crashes with an IllegalArgumentException
byte[] payload = new byte[] { 1 };
ByteBuffer buffer = ByteBuffer.wrap(payload).asReadOnlyBuffer();
ByteArrayOutputStream out = new ByteArrayOutputStream();
MessagePack.newDefaultPacker(out)
.packBinaryHeader(1)
.writePayload(buffer)
.flush();java.lang.IllegalArgumentException
at java.nio.Buffer.position(Buffer.java:244)
at org.msgpack.core.buffer.MessageBuffer.putByteBuffer(MessageBuffer.java:437)
at org.msgpack.core.MessagePacker.writePayload(MessagePacker.java:574)A possible patch
diff --git a/msgpack-core/src/main/java/org/msgpack/core/buffer/MessageBuffer.java b/msgpack-core/src/main/java/org/msgpack/core/buffer/MessageBuffer.java
index 50a84ac..8577504 100644
--- a/msgpack-core/src/main/java/org/msgpack/core/buffer/MessageBuffer.java
+++ b/msgpack-core/src/main/java/org/msgpack/core/buffer/MessageBuffer.java
@@ -419,10 +419,12 @@ public class MessageBuffer {
if(src.isDirect()) {
unsafe.copyMemory(null, DirectBufferAccess.getAddress(src) + src.position(), base, address + index, len);
+ src.position(src.position() + len);
}
else if(src.hasArray()) {
byte[] srcArray = src.array();
unsafe.copyMemory(srcArray, ARRAY_BYTE_BASE_OFFSET + src.position(), base, address + index, len);
+ src.position(src.position() + len);
}
else {
if(base != null) {
@@ -434,7 +436,6 @@ public class MessageBuffer {
}
}
}
- src.position(src.position() + len);
}
/**The position is modified when you call get on the byte buffer and modifying the position again is wrong since it goes over the end of the buffer or loses value.
Metadata
Metadata
Assignees
Labels
No labels