From 04af7ae477a97a12c1927c8af1b3c450fb3dfe0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Cant=C3=BA?= Date: Tue, 19 Oct 2021 01:42:43 -0700 Subject: [PATCH] Move NoInt32OverflowInTheBufferingLogic to OuterLoop and address pending feedback (#60606) --- .../tests/FileStream/Read.cs | 18 +++------- .../BufferedStream/BufferedStreamTests.cs | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/libraries/System.IO.FileSystem/tests/FileStream/Read.cs b/src/libraries/System.IO.FileSystem/tests/FileStream/Read.cs index fec3a7a84e2f1..0eccf6a2801bb 100644 --- a/src/libraries/System.IO.FileSystem/tests/FileStream/Read.cs +++ b/src/libraries/System.IO.FileSystem/tests/FileStream/Read.cs @@ -15,7 +15,8 @@ public void NegativeReadRootThrows() new FileStream(Path.GetPathRoot(Directory.GetCurrentDirectory()), FileMode.Open, FileAccess.Read)); } - [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.Is64BitProcess))] + [Fact] + [OuterLoop] [ActiveIssue("https://github.com/dotnet/runtime/issues/45954", TestPlatforms.Browser)] public void NoInt32OverflowInTheBufferingLogic() { @@ -30,10 +31,10 @@ public void NoInt32OverflowInTheBufferingLogic() using (var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { stream.Seek(position1, SeekOrigin.Begin); - stream.Write(data1, 0, data1.Length); + stream.Write(data1); stream.Seek(position2, SeekOrigin.Begin); - stream.Write(data2, 0, data2.Length); + stream.Write(data2); } using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) @@ -46,17 +47,6 @@ public void NoInt32OverflowInTheBufferingLogic() Assert.Equal(buffer.Length, stream.Read(buffer)); Assert.Equal(data2, buffer); } - - using (var stream = new BufferedStream(new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None, bufferSize: 0))) - { - stream.Seek(position1, SeekOrigin.Begin); - Assert.Equal(buffer.Length, stream.Read(buffer)); - Assert.Equal(data1, buffer); - - stream.Seek(position2, SeekOrigin.Begin); - Assert.Equal(buffer.Length, stream.Read(buffer)); - Assert.Equal(data2, buffer); - } } } } diff --git a/src/libraries/System.IO/tests/BufferedStream/BufferedStreamTests.cs b/src/libraries/System.IO/tests/BufferedStream/BufferedStreamTests.cs index 0826875520205..6294c2f2553d0 100644 --- a/src/libraries/System.IO/tests/BufferedStream/BufferedStreamTests.cs +++ b/src/libraries/System.IO/tests/BufferedStream/BufferedStreamTests.cs @@ -323,6 +323,40 @@ public async Task CopyToTest_ReadBeforeCopy_CopiesAllData(bool copyAsynchronousl Array.Copy(data, 1, expected, 0, expected.Length); Assert.Equal(expected, dst.ToArray()); } + + [Fact] + [OuterLoop] + [ActiveIssue("https://github.com/dotnet/runtime/issues/45954", TestPlatforms.Browser)] + public void NoInt32OverflowInTheBufferingLogic() + { + const long position1 = 10; + const long position2 = (1L << 32) + position1; + + string filePath = Path.GetTempFileName(); + byte[] data1 = new byte[] { 1, 2, 3, 4, 5 }; + byte[] data2 = new byte[] { 6, 7, 8, 9, 10 }; + byte[] buffer = new byte[5]; + + using (var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) + { + stream.Seek(position1, SeekOrigin.Begin); + stream.Write(data1); + + stream.Seek(position2, SeekOrigin.Begin); + stream.Write(data2); + } + + using (var stream = new BufferedStream(new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None, bufferSize: 0))) + { + stream.Seek(position1, SeekOrigin.Begin); + Assert.Equal(buffer.Length, stream.Read(buffer)); + Assert.Equal(data1, buffer); + + stream.Seek(position2, SeekOrigin.Begin); + Assert.Equal(buffer.Length, stream.Read(buffer)); + Assert.Equal(data2, buffer); + } + } } public class BufferedStream_TestLeaveOpen : TestLeaveOpen