From c74d0e745824fef500ff50a1cc166c2d3037b1b8 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Fri, 18 Aug 2017 09:43:04 -0700 Subject: [PATCH] Adds .Value to logger calls to avoid calling .ToUriComponents on a bad header. (#1169) * Add .Value to request properties in HostingRequestStartLog --- .../Internal/HostingRequestStartingLog.cs | 8 ++--- .../Internal/HostingRequestStartLogTests.cs | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 test/Microsoft.AspNetCore.Hosting.Tests/Internal/HostingRequestStartLogTests.cs diff --git a/src/Microsoft.AspNetCore.Hosting/Internal/HostingRequestStartingLog.cs b/src/Microsoft.AspNetCore.Hosting/Internal/HostingRequestStartingLog.cs index e0162cacdd..7506028a3c 100644 --- a/src/Microsoft.AspNetCore.Hosting/Internal/HostingRequestStartingLog.cs +++ b/src/Microsoft.AspNetCore.Hosting/Internal/HostingRequestStartingLog.cs @@ -64,10 +64,10 @@ namespace Microsoft.AspNetCore.Hosting.Internal _request.Protocol, _request.Method, _request.Scheme, - _request.Host, - _request.PathBase, - _request.Path, - _request.QueryString, + _request.Host.Value, + _request.PathBase.Value, + _request.Path.Value, + _request.QueryString.Value, _request.ContentType, _request.ContentLength); } diff --git a/test/Microsoft.AspNetCore.Hosting.Tests/Internal/HostingRequestStartLogTests.cs b/test/Microsoft.AspNetCore.Hosting.Tests/Internal/HostingRequestStartLogTests.cs new file mode 100644 index 0000000000..ca8e25ed9e --- /dev/null +++ b/test/Microsoft.AspNetCore.Hosting.Tests/Internal/HostingRequestStartLogTests.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Hosting.Internal; +using Moq; +using Xunit; +namespace Microsoft.AspNetCore.Hosting.Tests.Internal +{ + public class HostingRequestStartLogTests + { + [Theory] + [InlineData(",XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "Request starting GET 1.1 http://,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//?query test 0")] + [InlineData(" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "Request starting GET 1.1 http:// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//?query test 0")] + public void InvalidHttpContext_DoesNotThrowOnAccessingProperties(string input, string expected) + { + var mockRequest = new Mock(); + mockRequest.Setup(request => request.Protocol).Returns("GET"); + mockRequest.Setup(request => request.Method).Returns("1.1"); + mockRequest.Setup(request => request.Scheme).Returns("http"); + mockRequest.Setup(request => request.Host).Returns(new HostString(input)); + mockRequest.Setup(request => request.PathBase).Returns(new PathString("/")); + mockRequest.Setup(request => request.Path).Returns(new PathString("/")); + mockRequest.Setup(request => request.QueryString).Returns(new QueryString("?query")); + mockRequest.Setup(request => request.ContentType).Returns("test"); + mockRequest.Setup(request => request.ContentLength).Returns(0); + + var mockContext = new Mock(); + mockContext.Setup(context => context.Request).Returns(mockRequest.Object); + + var logger = new HostingRequestStartingLog(mockContext.Object); + Assert.Equal(expected, logger.ToString()); + } + } +}