From 8c4a83dbbf11eda3d889a6e437c17b4fc560c5a4 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Mon, 19 Mar 2018 11:08:36 -0700 Subject: [PATCH] Cleanup ReadAsync calls, make IISHttpContext private. (#685) --- .../Server/IISHttpContext.ReadWrite.cs | 24 +++------- .../Server/IISHttpRequestBody.cs | 4 +- .../Server/IISHttpResponseBody.cs | 5 --- .../InvalidReadWriteOperationTests.cs | 3 -- test/IISTestSite/Startup.cs | 45 +------------------ 5 files changed, 10 insertions(+), 71 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpContext.ReadWrite.cs b/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpContext.ReadWrite.cs index 89266d9e9a..ad1cfdb979 100644 --- a/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpContext.ReadWrite.cs +++ b/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpContext.ReadWrite.cs @@ -15,25 +15,11 @@ namespace Microsoft.AspNetCore.Server.IISIntegration /// /// Reads data from the Input pipe to the user. /// - /// - /// - /// + /// /// /// - public async Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + internal async Task ReadAsync(Memory memory, CancellationToken cancellationToken) { - // Start a task which will continuously call ReadFromIISAsync and WriteToIISAsync - if (buffer == null) - { - throw new ArgumentNullException(nameof(buffer)); - } - if (count == 0) - { - throw new ArgumentOutOfRangeException(nameof(count)); - } - - var memory = new Memory(buffer, offset, count); - StartProcessingRequestAndResponseBody(); while (true) @@ -44,7 +30,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration { if (!readableBuffer.IsEmpty) { - var actual = Math.Min(readableBuffer.Length, count); + var actual = Math.Min(readableBuffer.Length, memory.Length); readableBuffer = readableBuffer.Slice(0, actual); readableBuffer.CopyTo(memory.Span); return (int)actual; @@ -67,7 +53,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration /// /// /// - public Task WriteAsync(ReadOnlyMemory memory, CancellationToken cancellationToken = default(CancellationToken)) + internal Task WriteAsync(ReadOnlyMemory memory, CancellationToken cancellationToken = default(CancellationToken)) { // Want to keep exceptions consistent, @@ -88,7 +74,7 @@ namespace Microsoft.AspNetCore.Server.IISIntegration /// /// /// - public Task FlushAsync(CancellationToken cancellationToken = default(CancellationToken)) + internal Task FlushAsync(CancellationToken cancellationToken = default(CancellationToken)) { if (!_hasResponseStarted) { diff --git a/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpRequestBody.cs b/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpRequestBody.cs index 0a51d9fc7a..be5746c0d3 100644 --- a/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpRequestBody.cs +++ b/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpRequestBody.cs @@ -39,7 +39,9 @@ namespace Microsoft.AspNetCore.Server.IISIntegration public override unsafe Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) { - return _httpContext.ReadAsync(buffer, offset, count, cancellationToken); + var memory = new Memory(buffer, offset, count); + + return _httpContext.ReadAsync(memory, cancellationToken); } public override long Seek(long offset, SeekOrigin origin) diff --git a/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpResponseBody.cs b/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpResponseBody.cs index 38c8e64c2a..f850994a4a 100644 --- a/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpResponseBody.cs +++ b/src/Microsoft.AspNetCore.Server.IISIntegration/Server/IISHttpResponseBody.cs @@ -54,11 +54,6 @@ namespace Microsoft.AspNetCore.Server.IISIntegration public override unsafe Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) { - if (buffer == null) - { - throw new ArgumentNullException(nameof(buffer)); - } - return _httpContext.WriteAsync(new ReadOnlyMemory(buffer, offset, count), cancellationToken); } diff --git a/test/IISIntegration.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs b/test/IISIntegration.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs index 524bc2931f..3d8b995e75 100644 --- a/test/IISIntegration.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs +++ b/test/IISIntegration.FunctionalTests/Inprocess/InvalidReadWriteOperationTests.cs @@ -26,13 +26,11 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests } [ConditionalTheory] - [InlineData("/NullBuffer")] [InlineData("/InvalidOffsetSmall")] [InlineData("/InvalidOffsetLarge")] [InlineData("/InvalidCountSmall")] [InlineData("/InvalidCountLarge")] [InlineData("/InvalidCountWithOffset")] - [InlineData("/InvalidCountZeroRead")] public async Task TestInvalidReadOperations(string operation) { var result = await _fixture.Client.GetStringAsync($"/TestInvalidReadOperations{operation}"); @@ -40,7 +38,6 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests } [ConditionalTheory] - [InlineData("/NullBuffer")] [InlineData("/InvalidOffsetSmall")] [InlineData("/InvalidOffsetLarge")] [InlineData("/InvalidCountSmall")] diff --git a/test/IISTestSite/Startup.cs b/test/IISTestSite/Startup.cs index 91f04a7aec..75f94338d6 100644 --- a/test/IISTestSite/Startup.cs +++ b/test/IISTestSite/Startup.cs @@ -464,22 +464,7 @@ namespace IISTestSite app.Run(async context => { var success = false; - if (context.Request.Path.StartsWithSegments("/NullBuffer")) - { - try - { - await context.Request.Body.ReadAsync(null, 0, 0); - } - catch (ArgumentNullException) - { - success = true; - } - catch (Exception) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidOffsetSmall")) + if (context.Request.Path.StartsWithSegments("/InvalidOffsetSmall")) { try { @@ -534,21 +519,6 @@ namespace IISTestSite success = true; } } - else if (context.Request.Path.StartsWithSegments("/InvalidCountZeroRead")) - { - try - { - await context.Request.Body.ReadAsync(new byte[1], 0, 0); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - catch (Exception) - { - success = true; - } - } await context.Response.WriteAsync(success ? "Success" : "Failure"); }); @@ -558,18 +528,7 @@ namespace IISTestSite app.Run(async context => { var success = false; - if (context.Request.Path.StartsWithSegments("/NullBuffer")) - { - try - { - await context.Response.Body.WriteAsync(null, 0, 0); - } - catch (ArgumentNullException) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidOffsetSmall")) + if (context.Request.Path.StartsWithSegments("/InvalidOffsetSmall")) { try {