Skip to content

Commit 28ab5ce

Browse files
committed
use ByteBuffer.duplicate() in setDataPointer()
This avoids modifying the position of value.buffer.
1 parent 08009f3 commit 28ab5ce

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

runtime/src/main/java/org/capnproto/WireHelpers.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -850,14 +850,13 @@ static Data.Builder setDataPointer(int refOffset,
850850
SegmentBuilder segment,
851851
Data.Reader value) {
852852
Data.Builder builder = initDataPointer(refOffset, segment, value.size);
853-
int originalSrcPosition = value.buffer.position();
854-
int originalDstPosition = builder.buffer.position();
853+
854+
ByteBuffer slice = value.buffer.duplicate();
855+
slice.position(value.offset);
856+
slice.limit(value.offset + value.size);
857+
855858
builder.buffer.position(builder.offset);
856-
//# copy from src offset until src end
857-
builder.buffer.put(value.buffer);
858-
//# restore original positions
859-
builder.buffer.position(originalDstPosition);
860-
value.buffer.position(originalSrcPosition);
859+
builder.buffer.put(slice);
861860
return builder;
862861
}
863862

0 commit comments

Comments
 (0)