Skip to content

Commit 545d0de

Browse files
committed
Fixes msgpack#232
1 parent 5238391 commit 545d0de

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

msgpack-core/src/main/java/org/msgpack/core/buffer/MessageBuffer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,10 +419,12 @@ public void putByteBuffer(int index, ByteBuffer src, int len) {
419419

420420
if(src.isDirect()) {
421421
unsafe.copyMemory(null, DirectBufferAccess.getAddress(src) + src.position(), base, address + index, len);
422+
src.position(src.position() + len);
422423
}
423424
else if(src.hasArray()) {
424425
byte[] srcArray = src.array();
425426
unsafe.copyMemory(srcArray, ARRAY_BYTE_BASE_OFFSET + src.position(), base, address + index, len);
427+
src.position(src.position() + len);
426428
}
427429
else {
428430
if(base != null) {
@@ -434,7 +436,6 @@ else if(src.hasArray()) {
434436
}
435437
}
436438
}
437-
src.position(src.position() + len);
438439
}
439440

440441
/**

msgpack-core/src/test/scala/org/msgpack/core/MessagePackerTest.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.msgpack.core
1717

1818
import java.io.{FileInputStream, FileOutputStream, File, ByteArrayOutputStream}
19+
import java.nio.ByteBuffer
1920

2021
import org.msgpack.core.buffer.{ChannelBufferOutput, MessageBufferOutput, OutputStreamBufferOutput}
2122
import xerial.core.io.IOUtil
@@ -217,4 +218,14 @@ class MessagePackerTest extends MessagePackSpec {
217218

218219
out.toByteArray.length shouldBe packerTotalWrittenBytes
219220
}
221+
222+
"support read-only buffer" taggedAs("read-only") in {
223+
val payload = Array[Byte](1)
224+
val buffer = ByteBuffer.wrap(payload).asReadOnlyBuffer()
225+
val out = new ByteArrayOutputStream()
226+
val packer = MessagePack.newDefaultPacker(out)
227+
.packBinaryHeader(1)
228+
.writePayload(buffer)
229+
.close()
230+
}
220231
}

0 commit comments

Comments
 (0)