Skip to content

Commit 16cf5a7

Browse files
shblue21vietj
authored andcommitted
Fix incorrect Buffer#setBytes(ByteBuffer) length calculation
1 parent 63c11bb commit 16cf5a7

2 files changed

Lines changed: 14 additions & 1 deletion

File tree

vertx-core/src/main/java/io/vertx/core/buffer/impl/BufferImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ public BufferImpl setBuffer(int pos, Buffer buffer, int offset, int len) {
502502
}
503503

504504
public BufferImpl setBytes(int pos, ByteBuffer b) {
505-
ensureLength(pos + b.limit());
505+
ensureLength(pos + b.remaining());
506506
buffer.setBytes(pos, b);
507507
return this;
508508
}

vertx-core/src/test/java/io/vertx/tests/buffer/BufferTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,19 @@ public void testSetBytesBuffer2() throws Exception {
915915
assertNullPointerException(() -> Buffer.buffer(150).setBytes(0, (ByteBuffer) null));
916916
}
917917

918+
@Test
919+
public void testSetBytesByteBufferUsesRemaining() {
920+
ByteBuffer src = ByteBuffer.wrap(new byte[] { 10, 20, 30, 40, 50 });
921+
src.position(2);
922+
923+
Buffer dst = Buffer.buffer();
924+
dst.setBytes(1, src);
925+
926+
assertEquals(4, dst.length());
927+
assertTrue(TestUtils.byteArraysEqual(new byte[] { 0, 30, 40, 50 }, dst.getBytes()));
928+
assertEquals(src.limit(), src.position());
929+
}
930+
918931
private void testSetBytesBuffer(Buffer buff, Function<byte[], Buffer> bufferFactory) throws Exception {
919932
Buffer b = bufferFactory.apply(TestUtils.randomByteArray(100));
920933
buff.setBuffer(50, b);

0 commit comments

Comments
 (0)