From: Stephen Toub Date: Fri, 6 Nov 2020 17:56:07 +0000 (-0500) Subject: Tighten argument validation in StreamConformanceTests (#44326) X-Git-Tag: submit/tizen/20210909.063632~4731 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=25165160ef203f299850c9cce8e69e5c658ec378;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Tighten argument validation in StreamConformanceTests (#44326) --- diff --git a/src/libraries/Common/tests/Tests/System/IO/StreamConformanceTests.cs b/src/libraries/Common/tests/Tests/System/IO/StreamConformanceTests.cs index 47d12e7..cdee183 100644 --- a/src/libraries/Common/tests/Tests/System/IO/StreamConformanceTests.cs +++ b/src/libraries/Common/tests/Tests/System/IO/StreamConformanceTests.cs @@ -269,7 +269,6 @@ namespace System.IO.Tests foreach ((int offset, int count) in new[] { (0, 0), (1, 2) }) // validate 0, 0 isn't special-cased to be allowed with a null buffer { AssertExtensions.Throws(ReadWriteBufferName, () => { stream.Read(null!, offset, count); }); - AssertExtensions.Throws(ReadWriteBufferName, () => { stream.Read(null!, offset, count); }); AssertExtensions.Throws(ReadWriteBufferName, () => { stream.ReadAsync(null!, offset, count); }); AssertExtensions.Throws(ReadWriteBufferName, () => { stream.ReadAsync(null!, offset, count, default); }); AssertExtensions.Throws(ReadWriteBufferName, () => { stream.EndRead(stream.BeginRead(null!, offset, count, iar => { }, new object())); }); @@ -281,28 +280,23 @@ namespace System.IO.Tests AssertExtensions.Throws(ReadWriteOffsetName, () => { stream.ReadAsync(oneByteBuffer, -1, 0); }); AssertExtensions.Throws(ReadWriteOffsetName, () => { stream.ReadAsync(oneByteBuffer, -1, 0, default); }); AssertExtensions.Throws(ReadWriteOffsetName, () => { stream.EndRead(stream.BeginRead(oneByteBuffer, -1, 0, iar => { }, new object())); }); - Assert.ThrowsAny(() => { stream.Read(oneByteBuffer, 2, 0); }); - Assert.ThrowsAny(() => { stream.ReadAsync(oneByteBuffer, 2, 0); }); - Assert.ThrowsAny(() => { stream.ReadAsync(oneByteBuffer, 2, 0, default); }); - Assert.ThrowsAny(() => { stream.EndRead(stream.BeginRead(oneByteBuffer, 2, 0, iar => { }, new object())); }); // Invalid count - AssertExtensions.Throws(ReadWriteCountName, () => { stream.Read(oneByteBuffer, 0, -1); }); - AssertExtensions.Throws(ReadWriteCountName, () => { stream.ReadAsync(oneByteBuffer, 0, -1); }); - AssertExtensions.Throws(ReadWriteCountName, () => { stream.ReadAsync(oneByteBuffer, 0, -1, default); }); - AssertExtensions.Throws(ReadWriteCountName, () => { stream.EndRead(stream.BeginRead(oneByteBuffer, 0, -1, iar => { }, new object())); }); - Assert.ThrowsAny(() => { stream.Read(oneByteBuffer, 0, 2); }); - Assert.ThrowsAny(() => { stream.ReadAsync(oneByteBuffer, 0, 2); }); - Assert.ThrowsAny(() => { stream.ReadAsync(oneByteBuffer, 0, 2, default); }); - Assert.ThrowsAny(() => { stream.EndRead(stream.BeginRead(oneByteBuffer, 0, 2, iar => { }, new object())); }); + foreach (int count in new[] { -1, 2 }) + { + AssertExtensions.Throws(ReadWriteCountName, () => { stream.Read(oneByteBuffer, 0, count); }); + AssertExtensions.Throws(ReadWriteCountName, () => { stream.ReadAsync(oneByteBuffer, 0, count); }); + AssertExtensions.Throws(ReadWriteCountName, () => { stream.ReadAsync(oneByteBuffer, 0, count, default); }); + AssertExtensions.Throws(ReadWriteCountName, () => { stream.EndRead(stream.BeginRead(oneByteBuffer, 0, count, iar => { }, new object())); }); + } // Invalid offset + count - foreach ((int invalidOffset, int invalidCount) in new[] { (1, 1) }) + foreach ((int invalidOffset, int invalidCount) in new[] { (1, 1), (2, 0), (int.MaxValue, int.MaxValue) }) { - Assert.ThrowsAny(() => { stream.Read(oneByteBuffer, invalidOffset, invalidCount); }); - Assert.ThrowsAny(() => { stream.ReadAsync(oneByteBuffer, invalidOffset, invalidCount); }); - Assert.ThrowsAny(() => { stream.ReadAsync(oneByteBuffer, invalidOffset, invalidCount, default); }); - Assert.ThrowsAny(() => { stream.EndRead(stream.BeginRead(oneByteBuffer, invalidOffset, invalidCount, iar => { }, new object())); }); + AssertExtensions.Throws(ReadWriteCountName, () => { stream.Read(oneByteBuffer, invalidOffset, invalidCount); }); + AssertExtensions.Throws(ReadWriteCountName, () => { stream.ReadAsync(oneByteBuffer, invalidOffset, invalidCount); }); + AssertExtensions.Throws(ReadWriteCountName, () => { stream.ReadAsync(oneByteBuffer, invalidOffset, invalidCount, default); }); + AssertExtensions.Throws(ReadWriteCountName, () => { stream.EndRead(stream.BeginRead(oneByteBuffer, invalidOffset, invalidCount, iar => { }, new object())); }); } // Unknown arguments @@ -365,23 +359,18 @@ namespace System.IO.Tests AssertExtensions.Throws(ReadWriteOffsetName, () => { stream.WriteAsync(oneByteBuffer, -1, 0); }); AssertExtensions.Throws(ReadWriteOffsetName, () => { stream.WriteAsync(oneByteBuffer, -1, 0, default); }); AssertExtensions.Throws(ReadWriteOffsetName, () => { stream.EndWrite(stream.BeginWrite(oneByteBuffer, -1, 0, iar => { }, new object())); }); - Assert.ThrowsAny(() => { stream.Write(oneByteBuffer, 2, 0); }); - Assert.ThrowsAny(() => { stream.WriteAsync(oneByteBuffer, 2, 0); }); - Assert.ThrowsAny(() => { stream.WriteAsync(oneByteBuffer, 2, 0, default); }); - Assert.ThrowsAny(() => { stream.EndWrite(stream.BeginWrite(oneByteBuffer, 2, 0, iar => { }, new object())); }); // Invalid count - AssertExtensions.Throws(ReadWriteCountName, () => { stream.Write(oneByteBuffer, 0, -1); }); - AssertExtensions.Throws(ReadWriteCountName, () => { stream.WriteAsync(oneByteBuffer, 0, -1); }); - AssertExtensions.Throws(ReadWriteCountName, () => { stream.WriteAsync(oneByteBuffer, 0, -1, default); }); - AssertExtensions.Throws(ReadWriteCountName, () => { stream.EndWrite(stream.BeginWrite(oneByteBuffer, 0, -1, iar => { }, new object())); }); - Assert.ThrowsAny(() => { stream.Write(oneByteBuffer, 0, 2); }); - Assert.ThrowsAny(() => { stream.WriteAsync(oneByteBuffer, 0, 2); }); - Assert.ThrowsAny(() => { stream.WriteAsync(oneByteBuffer, 0, 2, default); }); - Assert.ThrowsAny(() => { stream.EndWrite(stream.BeginWrite(oneByteBuffer, 0, 2, iar => { }, new object())); }); + foreach (int count in new[] { -1, 2 }) + { + AssertExtensions.Throws(ReadWriteCountName, () => { stream.Write(oneByteBuffer, 0, count); }); + AssertExtensions.Throws(ReadWriteCountName, () => { stream.WriteAsync(oneByteBuffer, 0, count); }); + AssertExtensions.Throws(ReadWriteCountName, () => { stream.WriteAsync(oneByteBuffer, 0, count, default); }); + AssertExtensions.Throws(ReadWriteCountName, () => { stream.EndWrite(stream.BeginWrite(oneByteBuffer, 0, count, iar => { }, new object())); }); + } // Invalid offset + count - foreach ((int invalidOffset, int invalidCount) in new[] { (1, 1) }) + foreach ((int invalidOffset, int invalidCount) in new[] { (1, 1), (2, 0), (int.MaxValue, int.MaxValue) }) { Assert.ThrowsAny(() => { stream.Write(oneByteBuffer, invalidOffset, invalidCount); }); Assert.ThrowsAny(() => { stream.WriteAsync(oneByteBuffer, invalidOffset, invalidCount); }); @@ -430,10 +419,11 @@ namespace System.IO.Tests Assert.Equal(CanTimeout, stream.CanTimeout); if (stream.CanTimeout) { - Assert.Throws(() => stream.ReadTimeout = 0); - Assert.Throws(() => stream.ReadTimeout = -2); - Assert.Throws(() => stream.WriteTimeout = 0); - Assert.Throws(() => stream.WriteTimeout = -2); + foreach (int timeout in new[] { 0, -2 }) + { + Assert.Throws(() => stream.ReadTimeout = timeout); + Assert.Throws(() => stream.WriteTimeout = timeout); + } } else {