Skip to content

Commit 0470edf

Browse files
committed
Merge pull request #251 from msgpack/fix_msgbuf_u
Fix MessageBufferU#putByteBuffer
2 parents f27f1dc + 78ce8c8 commit 0470edf

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ public void putByteBuffer(int index, ByteBuffer src, int len) {
149149
int prevSrcLimit = src.limit();
150150
try {
151151
src.limit(src.position() + len);
152+
reference.position(index);
152153
reference.put(src);
153154
}
154155
finally {

msgpack-core/src/test/scala/org/msgpack/core/buffer/MessageBufferTest.scala

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,35 @@ class MessageBufferTest extends MessagePackSpec {
132132
bb.capacity shouldBe 10
133133
}
134134
}
135-
}
136135

136+
"put ByteBuffer on itself" in {
137+
for (t <- Seq(
138+
MessageBuffer.newBuffer(10),
139+
MessageBuffer.newDirectBuffer(10),
140+
MessageBuffer.newOffHeapBuffer(10))
141+
) {
142+
val b = Array[Byte](0x02, 0x03)
143+
val srcArray = ByteBuffer.wrap(b)
144+
val srcHeap = ByteBuffer.allocate(b.length)
145+
srcHeap.put(b).flip
146+
val srcOffHeap = ByteBuffer.allocateDirect(b.length)
147+
srcOffHeap.put(b).flip
148+
149+
for (src <- Seq(srcArray, srcHeap, srcOffHeap)) {
150+
// Write header bytes
151+
val header = Array[Byte](0x00, 0x01)
152+
t.putBytes(0, header, 0, header.length)
153+
// Write src after the header
154+
t.putByteBuffer(header.length, src, header.length)
155+
156+
t.getByte(0) shouldBe 0x00
157+
t.getByte(1) shouldBe 0x01
158+
t.getByte(2) shouldBe 0x02
159+
t.getByte(3) shouldBe 0x03
160+
}
161+
}
162+
}
163+
}
137164
}
138165

139166

0 commit comments

Comments
 (0)