Merge pull request #8740 from kiwidev/master

[csharp] ByteString.CreateCodedInput should use ArraySegment offset and count
pull/8746/head
Jan Tattermusch 4 years ago committed by GitHub
commit 071b1612b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 16
      csharp/src/Google.Protobuf.Test/ByteStringTest.cs
  2. 2
      csharp/src/Google.Protobuf/ByteString.cs

@ -210,6 +210,22 @@ namespace Google.Protobuf
Assert.AreEqual(byte.MaxValue, s[0]);
}
[Test]
public void CreateCodedInput_FromArraySegment()
{
byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6 };
ByteString bs = UnsafeByteOperations.UnsafeWrap(data.AsMemory(2, 3));
CodedInputStream codedInputStream = bs.CreateCodedInput();
byte[] bytes = codedInputStream.ReadRawBytes(3);
Assert.AreEqual(3, bytes.Length);
Assert.AreEqual(2, bytes[0]);
Assert.AreEqual(3, bytes[1]);
Assert.AreEqual(4, bytes[2]);
Assert.IsTrue(codedInputStream.IsAtEnd);
}
[Test]
public void WriteToStream()
{

@ -325,7 +325,7 @@ namespace Google.Protobuf
if (MemoryMarshal.TryGetArray(bytes, out ArraySegment<byte> segment) && segment.Count == bytes.Length)
{
// Fast path. ByteString was created with a complete array.
return new CodedInputStream(segment.Array);
return new CodedInputStream(segment.Array, segment.Offset, segment.Count);
}
else
{

Loading…
Cancel
Save