Null-check PagedBufferedStringWriter
This commit is contained in:
parent
f638c051fa
commit
906ac728c7
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System.IO;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
@ -34,6 +35,7 @@ namespace MvcSandbox
|
||||||
{
|
{
|
||||||
var host = new WebHostBuilder()
|
var host = new WebHostBuilder()
|
||||||
.UseDefaultHostingConfiguration(args)
|
.UseDefaultHostingConfiguration(args)
|
||||||
|
.UseContentRoot(Directory.GetCurrentDirectory())
|
||||||
.UseIISPlatformHandlerUrl()
|
.UseIISPlatformHandlerUrl()
|
||||||
.UseKestrel()
|
.UseKestrel()
|
||||||
.UseStartup<Startup>()
|
.UseStartup<Startup>()
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,9 @@
|
||||||
"Microsoft.Extensions.Logging.Console": "1.0.0-*",
|
"Microsoft.Extensions.Logging.Console": "1.0.0-*",
|
||||||
"Microsoft.NETCore.Platforms": "1.0.1-*"
|
"Microsoft.NETCore.Platforms": "1.0.1-*"
|
||||||
},
|
},
|
||||||
|
"content": [
|
||||||
|
"Views"
|
||||||
|
],
|
||||||
"tools": {
|
"tools": {
|
||||||
"dotnet-razor-tooling": "1.0.0-*"
|
"dotnet-razor-tooling": "1.0.0-*"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -83,11 +83,21 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
||||||
|
|
||||||
public override void Write(char[] buffer)
|
public override void Write(char[] buffer)
|
||||||
{
|
{
|
||||||
|
if (buffer == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Write(buffer, 0, buffer.Length);
|
Write(buffer, 0, buffer.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Write(char[] buffer, int index, int count)
|
public override void Write(char[] buffer, int index, int count)
|
||||||
{
|
{
|
||||||
|
if (buffer == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
while (count > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
var page = GetCurrentPage();
|
var page = GetCurrentPage();
|
||||||
|
|
@ -110,6 +120,11 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
||||||
|
|
||||||
public override void Write(string value)
|
public override void Write(string value)
|
||||||
{
|
{
|
||||||
|
if (value == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var index = 0;
|
var index = 0;
|
||||||
var count = value.Length;
|
var count = value.Length;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Buffers;
|
using System.Buffers;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
@ -9,11 +10,11 @@ using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
||||||
{
|
{
|
||||||
public class PagedBufferedStringWriterTest
|
public class PagedBufferedTextWriterTest
|
||||||
{
|
{
|
||||||
private static readonly char[] Content;
|
private static readonly char[] Content;
|
||||||
|
|
||||||
static PagedBufferedStringWriterTest()
|
static PagedBufferedTextWriterTest()
|
||||||
{
|
{
|
||||||
Content = new char[4 * PagedBufferedTextWriter.PageSize];
|
Content = new char[4 * PagedBufferedTextWriter.PageSize];
|
||||||
for (var i = 0; i < Content.Length; i++)
|
for (var i = 0; i < Content.Length; i++)
|
||||||
|
|
@ -43,6 +44,24 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
||||||
Assert.Equal<char>(Content, inner.ToString().ToCharArray());
|
Assert.Equal<char>(Content, inner.ToString().ToCharArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Write_CharArray_Null()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var pool = new TestArrayPool();
|
||||||
|
var inner = new StringWriter();
|
||||||
|
|
||||||
|
var writer = new PagedBufferedTextWriter(pool, inner);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
writer.Write((char[])null);
|
||||||
|
|
||||||
|
await writer.FlushAsync();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Empty(inner.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task Write_CharArray()
|
public async Task Write_CharArray()
|
||||||
{
|
{
|
||||||
|
|
@ -82,6 +101,19 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
||||||
Assert.Equal<char>(Content, inner.ToString().ToCharArray());
|
Assert.Equal<char>(Content, inner.ToString().ToCharArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Write_CharArray_Bounded_Null()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var pool = new TestArrayPool();
|
||||||
|
var inner = new StringWriter();
|
||||||
|
|
||||||
|
var writer = new PagedBufferedTextWriter(pool, inner);
|
||||||
|
|
||||||
|
// Act & Assert
|
||||||
|
Assert.Throws<ArgumentNullException>("buffer", () => writer.Write(null, 0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task Write_CharArray_Bounded()
|
public async Task Write_CharArray_Bounded()
|
||||||
{
|
{
|
||||||
|
|
@ -109,6 +141,24 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
||||||
Assert.Equal<char>(Content, inner.ToString().ToCharArray());
|
Assert.Equal<char>(Content, inner.ToString().ToCharArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Write_String_Null()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var pool = new TestArrayPool();
|
||||||
|
var inner = new StringWriter();
|
||||||
|
|
||||||
|
var writer = new PagedBufferedTextWriter(pool, inner);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
writer.Write((string)null);
|
||||||
|
|
||||||
|
await writer.FlushAsync();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Empty(inner.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task Write_String()
|
public async Task Write_String()
|
||||||
{
|
{
|
||||||
|
|
@ -158,7 +208,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
||||||
Assert.Equal(3, pool.Returned.Count);
|
Assert.Equal(3, pool.Returned.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestArrayPool: ArrayPool<char>
|
private class TestArrayPool : ArrayPool<char>
|
||||||
{
|
{
|
||||||
public IList<char[]> Returned { get; } = new List<char[]>();
|
public IList<char[]> Returned { get; } = new List<char[]>();
|
||||||
|
|
||||||
Loading…
Reference in New Issue