Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 0f44de2

Browse files
committed
[Backport] WriteAsync may truncate data after Advance(int)
1 parent 5aff0aa commit 0f44de2

File tree

5 files changed

+24
-5
lines changed

5 files changed

+24
-5
lines changed

pkg/Microsoft.Private.PackageBaseline/packageIndex.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2601,7 +2601,8 @@
26012601
"4.7.1",
26022602
"4.7.2",
26032603
"4.7.3",
2604-
"4.7.4"
2604+
"4.7.4",
2605+
"4.7.5"
26052606
],
26062607
"BaselineVersion": "4.7.0",
26072608
"InboxOn": {},
@@ -2612,7 +2613,8 @@
26122613
"4.0.2.0": "4.7.0",
26132614
"4.0.2.1": "4.7.1",
26142615
"4.0.2.2": "4.7.3",
2615-
"4.0.2.3": "4.7.4"
2616+
"4.0.2.3": "4.7.4",
2617+
"4.0.2.4": "4.7.5"
26162618
}
26172619
},
26182620
"System.IO.Pipes": {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Project>
22
<Import Project="..\Directory.Build.props" />
33
<PropertyGroup>
4-
<AssemblyVersion>4.0.2.3</AssemblyVersion>
5-
<PackageVersion>4.7.4</PackageVersion>
4+
<AssemblyVersion>4.0.2.4</AssemblyVersion>
5+
<PackageVersion>4.7.5</PackageVersion>
66
<StrongNameKeyId>Open</StrongNameKeyId>
77
</PropertyGroup>
88
</Project>

src/System.IO.Pipelines/src/System/IO/Pipelines/Pipe.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1005,7 +1005,7 @@ private void WriteMultiSegment(ReadOnlySpan<byte> source)
10051005
}
10061006

10071007
// We filled the segment
1008-
_writingHead.End += writable;
1008+
_writingHead.End += _writingHeadBytesBuffered;
10091009
_writingHeadBytesBuffered = 0;
10101010

10111011
// This is optimized to use pooled memory. That's why we pass 0 instead of

src/System.IO.Pipelines/tests/PipeLengthTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,5 +278,19 @@ public async Task NullExaminedAndConsumedNoops()
278278
ReadResult result = await _pipe.Reader.ReadAsync();
279279
_pipe.Reader.AdvanceTo(default, default);
280280
}
281+
282+
[Fact]
283+
public async Task AdvanceFollowedByWriteAsyncTest()
284+
{
285+
Memory<byte> buffer = new byte[26];
286+
Pipe pipe = new(new PipeOptions(minimumSegmentSize: 1));
287+
288+
var mem = pipe.Writer.GetMemory(14).Slice(0, 14);
289+
buffer.Slice(0, 14).CopyTo(mem);
290+
pipe.Writer.Advance(14);
291+
await pipe.Writer.WriteAsync(buffer.slice(14));
292+
ReadResult res = await pipe.Reader.ReadAsync();
293+
Assert.Equal(res.Buffer.Length, buffer.Length);
294+
}
281295
}
282296
}

src/packages.builds

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
<AdditionalProperties>$(AdditionalProperties)</AdditionalProperties>
2727
</Project>
2828
<!-- add specific builds / pkgproj's here to include in servicing builds -->
29+
<Project Include="$(MSBuildThisFileDirectory)System.IO.Pipelines\pkg\System.IO.Pipelines.pkgproj">
30+
<AdditionalProperties>$(AdditionalProperties)</AdditionalProperties>
31+
</Project>
2932
</ItemGroup>
3033

3134
<ItemGroup>

0 commit comments

Comments
 (0)