Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,9 @@ internal bool TryGetValues(HeaderDescriptor descriptor, [NotNullWhen(true)] out
return false;
}

public bool Contains(string name) => Contains(GetHeaderDescriptor(name));
public bool Contains(string name) =>
TryGetHeaderDescriptor(name, out HeaderDescriptor descriptor) &&
Contains(descriptor);

public override string ToString()
{
Expand Down Expand Up @@ -478,7 +480,9 @@ internal void SetOrRemoveParsedValue(HeaderDescriptor descriptor, object? value)
}
}

public bool Remove(string name) => Remove(GetHeaderDescriptor(name));
public bool Remove(string name) =>
TryGetHeaderDescriptor(name, out HeaderDescriptor descriptor) &&
Remove(descriptor);

internal bool RemoveParsedValue(HeaderDescriptor descriptor, object value, bool removeAll = false)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,26 @@ public void InvalidHeaders_AddRequestAndResponseHeaders_Throw()
Assert.Throws<InvalidOperationException>(() => { _headers.Add("Warning", "v"); });
}

[Fact]
public void Contains_DisallowedRequestHeaderOnContentHeaders_ReturnsFalse()
{
using var content = new StringContent("test");
HttpContentHeaders headers = content.Headers;
Assert.False(headers.Contains("Accept"));
Assert.False(headers.Contains("Accept-Encoding"));
Assert.False(headers.Contains("Host"));
}

[Fact]
public void Remove_DisallowedRequestHeaderOnContentHeaders_ReturnsFalse()
{
using var content = new StringContent("test");
HttpContentHeaders headers = content.Headers;
Assert.False(headers.Remove("Accept"));
Assert.False(headers.Remove("Accept-Encoding"));
Assert.False(headers.Remove("Host"));
}

private sealed class ComputeLengthHttpContent : HttpContent
{
private readonly Func<long?> _tryComputeLength;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1069,29 +1069,21 @@ public void Clear_AddMultipleHeadersAndThenClear_NoHeadersInCollection()
Assert.Equal(2, headers.Parser.TryParseValueCallCount);
}

[Fact]
public void Remove_UseNullHeaderName_Throw()
{
MockHeaders headers = new MockHeaders();

AssertExtensions.Throws<ArgumentNullException>("name", () => { headers.Remove(null); });
}

[Fact]
public void Remove_UseEmptyHeaderName_Throw()
[Theory]
[InlineData(null)]
[InlineData("")]
public void Remove_UseNullOrEmptyHeaderName_ReturnsFalse(string? headerName)
{
MockHeaders headers = new MockHeaders();

AssertExtensions.Throws<ArgumentException>("name", () => { headers.Remove(""); });
Assert.False(headers.Remove(headerName));
Comment thread
MihaZupan marked this conversation as resolved.
}

[Theory]
[MemberData(nameof(GetInvalidHeaderNames))]
public void Remove_UseInvalidHeaderName_Throw(string headerName)
public void Remove_UseInvalidHeaderName_ReturnsFalse(string headerName)
{
MockHeaders headers = new MockHeaders();

Assert.Throws<FormatException>(() => { headers.Remove(headerName); });
Assert.False(headers.Remove(headerName));
}

[Fact]
Expand Down Expand Up @@ -1593,29 +1585,21 @@ public void NonValidated_ValidInvalidAndRaw_AllReturned()
}
}

[Fact]
public void Contains_UseNullHeaderName_Throw()
{
MockHeaders headers = new MockHeaders();

AssertExtensions.Throws<ArgumentNullException>("name", () => { headers.Contains(null); });
}

[Fact]
public void Contains_UseEmptyHeaderName_Throw()
[Theory]
[InlineData(null)]
[InlineData("")]
public void Contains_UseNullOrEmptyHeaderName_ReturnsFalse(string? headerName)
{
MockHeaders headers = new MockHeaders();

AssertExtensions.Throws<ArgumentException>("name", () => { headers.Contains(""); });
Assert.False(headers.Contains(headerName));
Comment thread
MihaZupan marked this conversation as resolved.
}

[Theory]
[MemberData(nameof(GetInvalidHeaderNames))]
public void Contains_UseInvalidHeaderName_Throw(string headerName)
public void Contains_UseInvalidHeaderName_ReturnsFalse(string headerName)
{
MockHeaders headers = new MockHeaders();

Assert.Throws<FormatException>(() => { headers.Contains(headerName); });
Assert.False(headers.Contains(headerName));
}

[Fact]
Expand Down Expand Up @@ -2549,10 +2533,10 @@ public async Task ConcurrentReads_ReturnTheSameParsedValues(bool useDictionary,
}

[Fact]
public void TryAddInvalidHeader_ShouldThrowFormatException()
public void Remove_InvalidHeaderName_ReturnsFalse()
{
MockHeaders headers = new MockHeaders();
AssertExtensions.ThrowsContains<FormatException>(() => headers.Remove("\u0080"), "\u0080");
Assert.False(headers.Remove("\u0080"));
}

[Theory]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1650,5 +1650,23 @@ public void InvalidHeaders_AddContentHeaders_Throw()
Assert.Throws<InvalidOperationException>(() => { headers.Add("Expires", "v"); });
Assert.Throws<InvalidOperationException>(() => { headers.Add("Last-Modified", "v"); });
}

[Fact]
public void Contains_DisallowedContentHeaderOnRequestHeaders_ReturnsFalse()
{
HttpRequestHeaders headers = new HttpRequestMessage().Headers;
Assert.False(headers.Contains("Content-Type"));
Assert.False(headers.Contains("Content-Encoding"));
Assert.False(headers.Contains("content-length"));
}

[Fact]
public void Remove_DisallowedContentHeaderOnRequestHeaders_ReturnsFalse()
{
HttpRequestHeaders headers = new HttpRequestMessage().Headers;
Assert.False(headers.Remove("Content-Type"));
Assert.False(headers.Remove("Content-Encoding"));
Assert.False(headers.Remove("content-length"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -710,5 +710,21 @@ public void InvalidHeaders_AddContentHeaders_Throw()
Assert.Throws<InvalidOperationException>(() => { headers.Add("Expires", "v"); });
Assert.Throws<InvalidOperationException>(() => { headers.Add("Last-Modified", "v"); });
}

[Fact]
public void Contains_DisallowedContentHeaderOnResponseHeaders_ReturnsFalse()
{
Assert.False(headers.Contains("Content-Type"));
Assert.False(headers.Contains("Content-Encoding"));
Assert.False(headers.Contains("content-length"));
}

[Fact]
public void Remove_DisallowedContentHeaderOnResponseHeaders_ReturnsFalse()
{
Assert.False(headers.Remove("Content-Type"));
Assert.False(headers.Remove("Content-Encoding"));
Assert.False(headers.Remove("content-length"));
}
}
}
}
Loading