Skip to content
This repository was archived by the owner on Nov 20, 2018. It is now read-only.

Commit 187e89f

Browse files
filipwTratcher
authored andcommitted
Do not throw a null reference from request.GetDisplayUrl() (#1057)
1 parent ec176b2 commit 187e89f

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

src/Microsoft.AspNetCore.Http.Extensions/UriHelper.cs

+7-6
Original file line numberDiff line numberDiff line change
@@ -195,17 +195,18 @@ public static string GetEncodedPathAndQuery(this HttpRequest request)
195195
/// <returns></returns>
196196
public static string GetDisplayUrl(this HttpRequest request)
197197
{
198-
var host = request.Host.Value;
199-
var pathBase = request.PathBase.Value;
200-
var path = request.Path.Value;
201-
var queryString = request.QueryString.Value;
198+
var scheme = request.Scheme ?? string.Empty;
199+
var host = request.Host.Value ?? string.Empty;
200+
var pathBase = request.PathBase.Value ?? string.Empty;
201+
var path = request.Path.Value ?? string.Empty;
202+
var queryString = request.QueryString.Value ?? string.Empty;
202203

203204
// PERF: Calculate string length to allocate correct buffer size for StringBuilder.
204-
var length = request.Scheme.Length + SchemeDelimiter.Length + host.Length
205+
var length = scheme.Length + SchemeDelimiter.Length + host.Length
205206
+ pathBase.Length + path.Length + queryString.Length;
206207

207208
return new StringBuilder(length)
208-
.Append(request.Scheme)
209+
.Append(scheme)
209210
.Append(SchemeDelimiter)
210211
.Append(host)
211212
.Append(pathBase)

test/Microsoft.AspNetCore.Http.Extensions.Tests/UriHelperTests.cs

+6-4
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,19 @@ public void GetEncodedUrlFromRequest()
5555
Assert.Equal("http://my.xn--host-cpd:80/un%3Fescaped/base/un%3Fescaped?name=val%23ue", request.GetEncodedUrl());
5656
}
5757

58-
[Fact]
59-
public void GetDisplayUrlFromRequest()
58+
[Theory]
59+
[InlineData("/un?escaped/base")]
60+
[InlineData(null)]
61+
public void GetDisplayUrlFromRequest(string pathBase)
6062
{
6163
var request = new DefaultHttpContext().Request;
6264
request.Scheme = "http";
6365
request.Host = new HostString("my.HoΨst:80");
64-
request.PathBase = new PathString("/un?escaped/base");
66+
request.PathBase = new PathString(pathBase);
6567
request.Path = new PathString("/un?escaped");
6668
request.QueryString = new QueryString("?name=val%23ue");
6769

68-
Assert.Equal("http://my.hoψst:80/un?escaped/base/un?escaped?name=val%23ue", request.GetDisplayUrl());
70+
Assert.Equal("http://my.hoψst:80" + pathBase + "/un?escaped?name=val%23ue", request.GetDisplayUrl());
6971
}
7072

7173
[Theory]

0 commit comments

Comments
 (0)