Skip to content

Commit f637aec

Browse files
authored
revert unnecessay changes
1 parent b74969e commit f637aec

File tree

2 files changed

+198
-4
lines changed

2 files changed

+198
-4
lines changed

src/Middleware/HttpOverrides/src/ForwardedHeadersOptions.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,7 @@ public class ForwardedHeadersOptions
8484
/// <summary>
8585
/// Address ranges of known proxies to accept forwarded headers from.
8686
/// </summary>
87-
public IList<IPNetwork> KnownNetworks { get; } = new List<IPNetwork>()
88-
{
89-
IPNetwork.Parse("127.0.0.0/8")
90-
};
87+
public IList<IPNetwork> KnownNetworks { get; } = new List<IPNetwork>() { new IPNetwork(IPAddress.Loopback, 8) };
9188

9289
/// <summary>
9390
/// The allowed values from x-forwarded-host. If the list is empty then all hosts are allowed.
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
using System.Net;
4+
5+
namespace Microsoft.AspNetCore.HttpOverrides;
6+
7+
public class IPNetworkTest
8+
{
9+
[Theory]
10+
[InlineData("10.1.1.0", 8, "10.1.1.10")]
11+
[InlineData("174.0.0.0", 7, "175.1.1.10")]
12+
[InlineData("10.174.0.0", 15, "10.175.1.10")]
13+
[InlineData("10.168.0.0", 14, "10.171.1.10")]
14+
[InlineData("192.168.0.1", 31, "192.168.0.0")]
15+
[InlineData("192.168.0.1", 31, "192.168.0.1")]
16+
[InlineData("192.168.0.1", 32, "192.168.0.1")]
17+
[InlineData("192.168.1.1", 0, "0.0.0.0")]
18+
[InlineData("192.168.1.1", 0, "255.255.255.255")]
19+
[InlineData("2001:db8:3c4d::", 127, "2001:db8:3c4d::1")]
20+
[InlineData("2001:db8:3c4d::1", 128, "2001:db8:3c4d::1")]
21+
[InlineData("2001:db8:3c4d::1", 0, "::")]
22+
[InlineData("2001:db8:3c4d::1", 0, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")]
23+
public void Contains_Positive(string prefixText, int length, string addressText)
24+
{
25+
var network = new IPNetwork(IPAddress.Parse(prefixText), length);
26+
Assert.True(network.Contains(IPAddress.Parse(addressText)));
27+
}
28+
29+
[Theory]
30+
[InlineData("10.1.0.0", 16, "10.2.1.10")]
31+
[InlineData("174.0.0.0", 7, "173.1.1.10")]
32+
[InlineData("10.174.0.0", 15, "10.173.1.10")]
33+
[InlineData("10.168.0.0", 14, "10.172.1.10")]
34+
[InlineData("192.168.0.1", 31, "192.168.0.2")]
35+
[InlineData("192.168.0.1", 32, "192.168.0.0")]
36+
[InlineData("2001:db8:3c4d::", 127, "2001:db8:3c4d::2")]
37+
public void Contains_Negative(string prefixText, int length, string addressText)
38+
{
39+
var network = new IPNetwork(IPAddress.Parse(prefixText), length);
40+
Assert.False(network.Contains(IPAddress.Parse(addressText)));
41+
}
42+
43+
[Theory]
44+
[InlineData("192.168.1.1", 0)]
45+
[InlineData("192.168.1.1", 32)]
46+
[InlineData("2001:db8:3c4d::1", 0)]
47+
[InlineData("2001:db8:3c4d::1", 128)]
48+
public void Ctor_WithValidFormat_IsSuccessfullyCreated(string prefixText, int prefixLength)
49+
{
50+
// Arrange
51+
var address = IPAddress.Parse(prefixText);
52+
53+
// Act
54+
var network = new IPNetwork(address, prefixLength);
55+
56+
// Assert
57+
Assert.Equal(prefixText, network.Prefix.ToString());
58+
Assert.Equal(prefixLength, network.PrefixLength);
59+
}
60+
61+
[Theory]
62+
[InlineData("192.168.1.1", -1)]
63+
[InlineData("192.168.1.1", 33)]
64+
[InlineData("2001:db8:3c4d::1", -1)]
65+
[InlineData("2001:db8:3c4d::1", 129)]
66+
public void Ctor_WithPrefixLengthOutOfRange_ThrowsArgumentOutOfRangeException(string prefixText, int prefixLength)
67+
{
68+
// Arrange
69+
var address = IPAddress.Parse(prefixText);
70+
71+
// Act
72+
var ex = Assert.Throws<ArgumentOutOfRangeException>(() => new IPNetwork(address, prefixLength));
73+
74+
// Assert
75+
Assert.StartsWith("The prefix length was out of range.", ex.Message);
76+
}
77+
78+
[Theory]
79+
[MemberData(nameof(ValidPrefixWithPrefixLengthData))]
80+
public void Parse_WithValidFormat_ParsedCorrectly(string input, string expectedPrefix, int expectedPrefixLength)
81+
{
82+
// Act
83+
var network = IPNetwork.Parse(input);
84+
85+
// Assert
86+
Assert.Equal(expectedPrefix, network.Prefix.ToString());
87+
Assert.Equal(expectedPrefixLength, network.PrefixLength);
88+
}
89+
90+
[Theory]
91+
[InlineData(null)]
92+
[MemberData(nameof(InvalidPrefixOrPrefixLengthData))]
93+
public void Parse_WithInvalidFormat_ThrowsFormatException(string input)
94+
{
95+
// Arrange & Act & Assert
96+
var ex = Assert.Throws<FormatException>(() => IPNetwork.Parse(input));
97+
Assert.Equal("An invalid IP address or prefix length was specified.", ex.Message);
98+
}
99+
100+
[Theory]
101+
[MemberData(nameof(PrefixLengthOutOfRangeData))]
102+
public void Parse_WithOutOfRangePrefixLength_ThrowsArgumentOutOfRangeException(string input)
103+
{
104+
// Arrange & Act & Assert
105+
var ex = Assert.Throws<ArgumentOutOfRangeException>(() => IPNetwork.Parse(input));
106+
Assert.StartsWith("The prefix length was out of range.", ex.Message);
107+
}
108+
109+
[Theory]
110+
[MemberData(nameof(ValidPrefixWithPrefixLengthData))]
111+
public void TryParse_WithValidFormat_ParsedCorrectly(string input, string expectedPrefix, int expectedPrefixLength)
112+
{
113+
// Act
114+
var result = IPNetwork.TryParse(input, out var network);
115+
116+
// Assert
117+
Assert.True(result);
118+
Assert.NotNull(network);
119+
Assert.Equal(expectedPrefix, network.Prefix.ToString());
120+
Assert.Equal(expectedPrefixLength, network.PrefixLength);
121+
}
122+
123+
[Theory]
124+
[InlineData(null)]
125+
[MemberData(nameof(InvalidPrefixOrPrefixLengthData))]
126+
[MemberData(nameof(PrefixLengthOutOfRangeData))]
127+
public void TryParse_WithInvalidFormat_ReturnsFalse(string input)
128+
{
129+
// Act
130+
var result = IPNetwork.TryParse(input, out var network);
131+
132+
// Assert
133+
Assert.False(result);
134+
Assert.Null(network);
135+
}
136+
137+
public static TheoryData<string, string, int> ValidPrefixWithPrefixLengthData() => new()
138+
{
139+
// IPv4
140+
{ "10.1.0.0/16", "10.1.0.0", 16 },
141+
{ "10.1.1.0/8", "10.1.1.0", 8 },
142+
{ "174.0.0.0/7", "174.0.0.0", 7 },
143+
{ "10.174.0.0/15", "10.174.0.0", 15 },
144+
{ "10.168.0.0/14", "10.168.0.0", 14 },
145+
{ "192.168.0.1/31", "192.168.0.1", 31 },
146+
{ "192.168.0.1/31", "192.168.0.1", 31 },
147+
{ "192.168.0.1/32", "192.168.0.1", 32 },
148+
{ "192.168.1.1/0", "192.168.1.1", 0 },
149+
{ "192.168.1.1/0", "192.168.1.1", 0 },
150+
151+
// IPv6
152+
{ "2001:db8:3c4d::/127", "2001:db8:3c4d::", 127 },
153+
{ "2001:db8:3c4d::1/128", "2001:db8:3c4d::1", 128 },
154+
{ "2001:db8:3c4d::1/0", "2001:db8:3c4d::1", 0 },
155+
{ "2001:db8:3c4d::1/0", "2001:db8:3c4d::1", 0 }
156+
};
157+
158+
public static TheoryData<string> InvalidPrefixOrPrefixLengthData() => new()
159+
{
160+
string.Empty,
161+
"abcdefg",
162+
163+
// Missing forward slash
164+
"10.1.0.016",
165+
"2001:db8:3c4d::1127",
166+
167+
// Invalid prefix
168+
"/16",
169+
"10.1./16",
170+
"10.1.0./16",
171+
"10.1.ABC.0/16",
172+
"200123:db8:3c4d::/127",
173+
":db8:3c4d::/127",
174+
"2001:?:3c4d::1/0",
175+
176+
// Invalid prefix length
177+
"10.1.0.0/",
178+
"10.1.0.0/16-",
179+
"10.1.0.0/ABC",
180+
"2001:db8:3c4d::/",
181+
"2001:db8:3c4d::1/128-",
182+
"2001:db8:3c4d::1/ABC"
183+
};
184+
185+
public static TheoryData<string> PrefixLengthOutOfRangeData() => new()
186+
{
187+
// Negative prefix length
188+
"10.1.0.0/-16",
189+
"2001:db8:3c4d::/-127",
190+
191+
// Prefix length out of range (IPv4)
192+
"10.1.0.0/33",
193+
194+
// Prefix length out of range (IPv6)
195+
"2001:db8:3c4d::/129"
196+
};
197+
}

0 commit comments

Comments
 (0)