Skip to content

Commit fa5dcda

Browse files
authored
use the name of the header when throwing exception for invalid chars (#66250)
* use the name of the header when throwing exception for invalid chars * delete VS code cleanups * delete VS code cleanups 2 * add suggested changes 1 * delete VS code cleanups 3 * delete VS code cleanups 4 * delete VS code cleanups 5
1 parent 8fe2d2b commit fa5dcda

File tree

6 files changed

+22
-8
lines changed

6 files changed

+22
-8
lines changed

src/libraries/Common/src/System/Net/HttpValidationHelpers.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ internal static string CheckBadHeaderNameChars(string name)
1010
// First, check for absence of separators and spaces.
1111
if (IsInvalidMethodOrHeaderString(name))
1212
{
13-
throw new ArgumentException(SR.net_WebHeaderInvalidHeaderChars, nameof(name));
13+
throw new ArgumentException(string.Format(SR.net_WebHeaderInvalidHeaderChars, name), nameof(name));
1414
}
1515

1616
// Second, check for non CTL ASCII-7 characters (32-126).
1717
if (ContainsNonAsciiChars(name))
1818
{
19-
throw new ArgumentException(SR.net_WebHeaderInvalidHeaderChars, nameof(name));
19+
throw new ArgumentException(string.Format(SR.net_WebHeaderInvalidHeaderChars, name), nameof(name));
2020
}
2121
return name;
2222
}

src/libraries/System.Net.Http/src/Resources/Strings.resx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@
136136
<value>Cannot add value because header '{0}' does not support multiple values.</value>
137137
</data>
138138
<data name="net_http_headers_invalid_header_name" xml:space="preserve">
139-
<value>The header name format is invalid.</value>
139+
<value>The header name '{0}' has an invalid format.</value>
140140
</data>
141141
<data name="net_http_headers_invalid_value" xml:space="preserve">
142142
<value>The format of value '{0}' is invalid.</value>

src/libraries/System.Net.Http/src/System/Net/Http/Headers/HttpHeaders.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1046,7 +1046,7 @@ private HeaderDescriptor GetHeaderDescriptor(string name)
10461046

10471047
if (!HeaderDescriptor.TryGet(name, out HeaderDescriptor descriptor))
10481048
{
1049-
throw new FormatException(SR.net_http_headers_invalid_header_name);
1049+
throw new FormatException(string.Format(SR.net_http_headers_invalid_header_name, name));
10501050
}
10511051

10521052
if ((descriptor.HeaderType & _allowedHeaderTypes) != 0)

src/libraries/System.Net.Http/tests/UnitTests/Headers/HttpHeadersTest.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2359,6 +2359,13 @@ public void Add_LargeNumberOfHeaders_OperationsStillSupported(int numberOfHeader
23592359
Assert.Equal(new[] { "newValue" }, valuesFor3);
23602360
}
23612361

2362+
[Fact]
2363+
public void TryAddInvalidHeader_ShouldThrowFormatException()
2364+
{
2365+
MockHeaders headers = new MockHeaders();
2366+
AssertExtensions.ThrowsContains<FormatException>(() => headers.Remove("\u0080"), "\u0080");
2367+
}
2368+
23622369
public static IEnumerable<object[]> NumberOfHeadersUpToArrayThreshold_AddNonValidated_EnumerateNonValidated()
23632370
{
23642371
for (int i = 0; i <= HttpHeaders.ArrayThreshold; i++)

src/libraries/System.Net.WebHeaderCollection/src/Resources/Strings.resx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
<value>Specified value has invalid CRLF characters.</value>
7272
</data>
7373
<data name="net_WebHeaderInvalidHeaderChars" xml:space="preserve">
74-
<value>Specified value has invalid HTTP Header characters.</value>
74+
<value>Specified value '{0}' has invalid HTTP Header characters.</value>
7575
</data>
7676
<data name="net_WebHeaderMissingColon" xml:space="preserve">
7777
<value>Specified value does not have a ':' separator.</value>

src/libraries/System.Net.WebHeaderCollection/tests/WebHeaderCollectionTest.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ public void Setter_NullOrEmptyName_Throws(string name)
151151
public void Setter_InvalidName_Throws(string name)
152152
{
153153
WebHeaderCollection w = new WebHeaderCollection();
154-
AssertExtensions.Throws<ArgumentException>("name", () => w[name] = "test");
154+
ArgumentException exception = AssertExtensions.Throws<ArgumentException>("name", () => w[name] = "test");
155+
Assert.Contains(name, exception.Message);
155156
}
156157

157158
public static object[][] InvalidValues = {
@@ -234,7 +235,8 @@ public void Remove_NullOrEmptyHeader_ThrowsArgumentNullException(string name)
234235
public void Remove_InvalidHeader_ThrowsArgumentException(string name)
235236
{
236237
var headers = new WebHeaderCollection();
237-
AssertExtensions.Throws<ArgumentException>("name", () => headers.Remove(name));
238+
ArgumentException exception = AssertExtensions.Throws<ArgumentException>("name", () => headers.Remove(name));
239+
Assert.Contains(name, exception.Message);
238240
}
239241

240242
[Fact]
@@ -481,7 +483,12 @@ public void Add_NullName_ThrowsArgumentNullException()
481483
public void Add_InvalidName_ThrowsArgumentException(string name)
482484
{
483485
var headers = new WebHeaderCollection();
484-
AssertExtensions.Throws<ArgumentException>("name", () => headers.Add(name, "value"));
486+
ArgumentException exception = AssertExtensions.Throws<ArgumentException>("name", () => headers.Add(name, "value"));
487+
488+
if (!string.IsNullOrEmpty(name))
489+
{
490+
Assert.Contains(name, exception.Message);
491+
}
485492
}
486493

487494
[Theory]

0 commit comments

Comments
 (0)