[3.1.x] Backport HttpContext.Items fix (#17237)

This commit is contained in:
Chris Ross 2019-11-22 15:24:27 -08:00 committed by Andrew Stanton-Nurse
parent 2d799789fe
commit 6902b14471
2 changed files with 43 additions and 2 deletions

View File

@ -101,7 +101,7 @@ namespace Microsoft.AspNetCore.Http
EmptyDictionary.Collection.CopyTo(array, arrayIndex);
}
_items.CopyTo(array, arrayIndex);
_items?.CopyTo(array, arrayIndex);
}
int ICollection<KeyValuePair<object, object>>.Count => _items?.Count ?? 0;
@ -133,7 +133,7 @@ namespace Microsoft.AspNetCore.Http
IEnumerator<KeyValuePair<object, object>> IEnumerable<KeyValuePair<object, object>>.GetEnumerator()
=> _items?.GetEnumerator() ?? EmptyEnumerator.Instance;
IEnumerator IEnumerable.GetEnumerator() => _items.GetEnumerator() ?? EmptyEnumerator.Instance;
IEnumerator IEnumerable.GetEnumerator() => _items?.GetEnumerator() ?? EmptyEnumerator.Instance;
private class EmptyEnumerator : IEnumerator<KeyValuePair<object, object>>
{

View File

@ -0,0 +1,41 @@
// 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.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.IO.Pipelines;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Primitives;
using Xunit;
namespace Microsoft.AspNetCore.Http
{
public class ItemsDictionaryTests
{
[Fact]
public void GetEnumerator_ShouldResolveWithoutNullReferenceException()
{
// Arrange
var dict = new ItemsDictionary();
// Act and Assert
IEnumerable en = (IEnumerable) dict;
Assert.NotNull(en.GetEnumerator());
}
[Fact]
public void CopyTo_ShouldCopyItemsWithoutNullReferenceException() {
// Arrange
var dict = new ItemsDictionary();
var pairs = new KeyValuePair<object, object>[] { new KeyValuePair<object, object>("first", "value") };
// Act and Assert
ICollection<KeyValuePair<object, object>> cl = (ICollection<KeyValuePair<object, object>>) dict;
cl.CopyTo(pairs, 0);
}
}
}