Skip to content

Commit 26b31d3

Browse files
committed
CSHARP-1530: Fix bug in WriteSlice when the slice is backed by more than one chunk.
1 parent b759efa commit 26b31d3

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

src/MongoDB.Bson.Tests/IO/BsonStreamExtensionsTests.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -667,13 +667,29 @@ public void WriteBytes_should_throw_when_stream_is_null()
667667
[Test]
668668
public void WriteSlice_should_have_expected_effect(
669669
[Values(0, 1, 2, 16)]
670-
int length)
670+
int length,
671+
[Values(1, 2, 3)]
672+
int numberOfChunks)
671673
{
674+
numberOfChunks = length == 0 ? 1 : length < numberOfChunks ? length : numberOfChunks;
675+
672676
using (var memoryStream = new MemoryStream())
673677
using (var stream = new BsonStreamAdapter(memoryStream))
674678
{
679+
IByteBuffer slice;
675680
var bytes = Enumerable.Range(0, length).Select(n => (byte)n).ToArray();
676-
var slice = new ByteArrayBuffer(bytes, isReadOnly: true);
681+
if (numberOfChunks == 1)
682+
{
683+
slice = new ByteArrayBuffer(bytes, isReadOnly: true);
684+
}
685+
else
686+
{
687+
var chunkSize = length / numberOfChunks;
688+
var chunks = Enumerable.Range(0, numberOfChunks)
689+
.Select(i => bytes.Skip(i * chunkSize).Take(i < numberOfChunks - 1 ? chunkSize : int.MaxValue).ToArray())
690+
.Select(b => new ByteArrayChunk(b));
691+
slice = new MultiChunkBuffer(chunks);
692+
}
677693

678694
stream.WriteSlice(slice);
679695

src/MongoDB.Bson/IO/BsonStreamExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ public static void WriteSlice(this BsonStream stream, IByteBuffer slice)
311311
var segment = slice.AccessBackingBytes(position);
312312
var partialCount = Math.Min(count, segment.Count);
313313
stream.WriteBytes(segment.Array, segment.Offset, partialCount);
314-
position += count;
314+
position += partialCount;
315315
count -= partialCount;
316316
}
317317
}

0 commit comments

Comments
 (0)