Skip to content

Commit b07ac51

Browse files
committed
Remove "Latin1RequestHeaders" config
1 parent 39f8ada commit b07ac51

File tree

11 files changed

+8
-84
lines changed

11 files changed

+8
-84
lines changed

src/Servers/Kestrel/Core/src/Internal/ConfigurationReader.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,12 @@ internal class ConfigurationReader
1818
private const string EndpointDefaultsKey = "EndpointDefaults";
1919
private const string EndpointsKey = "Endpoints";
2020
private const string UrlKey = "Url";
21-
private const string Latin1RequestHeadersKey = "Latin1RequestHeaders";
2221

2322
private readonly IConfiguration _configuration;
2423

2524
private IDictionary<string, CertificateConfig> _certificates;
2625
private EndpointDefaults _endpointDefaults;
2726
private IEnumerable<EndpointConfig> _endpoints;
28-
private bool? _latin1RequestHeaders;
2927

3028
public ConfigurationReader(IConfiguration configuration)
3129
{
@@ -35,7 +33,6 @@ public ConfigurationReader(IConfiguration configuration)
3533
public IDictionary<string, CertificateConfig> Certificates => _certificates ??= ReadCertificates();
3634
public EndpointDefaults EndpointDefaults => _endpointDefaults ??= ReadEndpointDefaults();
3735
public IEnumerable<EndpointConfig> Endpoints => _endpoints ??= ReadEndpoints();
38-
public bool Latin1RequestHeaders => _latin1RequestHeaders ??= _configuration.GetValue<bool>(Latin1RequestHeadersKey);
3936

4037
private IDictionary<string, CertificateConfig> ReadCertificates()
4138
{

src/Servers/Kestrel/Core/src/Internal/Http/HttpHeaders.Generated.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6548,8 +6548,7 @@ public unsafe void Append(ReadOnlySpan<byte> name, ReadOnlySpan<byte> value)
65486548
}
65496549
else if (((Unsafe.ReadUnaligned<ulong>(ref nameStart) & 0xffdfdfdfdfdfdfdfuL) == 0x2d544e45544e4f43uL) && ((Unsafe.ReadUnaligned<uint>(ref Unsafe.AddByteOffset(ref nameStart, (IntPtr)(2 * sizeof(uint)))) & 0xdfdfdfdfu) == 0x474e454cu) && ((Unsafe.ReadUnaligned<ushort>(ref Unsafe.AddByteOffset(ref nameStart, (IntPtr)(6 * sizeof(ushort)))) & 0xdfdfu) == 0x4854u))
65506550
{
6551-
if (ReferenceEquals(EncodingSelector, KestrelServerOptions.DefaultRequestHeaderEncodingSelector)
6552-
|| ReferenceEquals(EncodingSelector, KestrelServerOptions.DefaultLatin1RequestHeaderEncodingSelector))
6551+
if (ReferenceEquals(EncodingSelector, KestrelServerOptions.DefaultRequestHeaderEncodingSelector))
65536552
{
65546553
AppendContentLength(value);
65556554
}

src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ public void Reset()
369369
ConnectionIdFeature = ConnectionId;
370370

371371
HttpRequestHeaders.Reset();
372-
HttpRequestHeaders.EncodingSelector = ServerOptions.GetRequestHeaderEncodingSelector();
372+
HttpRequestHeaders.EncodingSelector = ServerOptions.RequestHeaderEncodingSelector;
373373
HttpRequestHeaders.ReuseHeaderValues = !ServerOptions.DisableStringReuse;
374374
HttpResponseHeaders.Reset();
375375
RequestHeaders = HttpRequestHeaders;

src/Servers/Kestrel/Core/src/KestrelConfigurationLoader.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,6 @@ public void Load()
255255

256256
ConfigurationReader = new ConfigurationReader(Configuration);
257257

258-
Options.Latin1RequestHeaders = ConfigurationReader.Latin1RequestHeaders;
259-
260258
LoadDefaultCert(ConfigurationReader);
261259

262260
foreach (var endpoint in ConfigurationReader.Endpoints)

src/Servers/Kestrel/Core/src/KestrelServerOptions.cs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public class KestrelServerOptions
2525
{
2626
// internal to fast-path header decoding when RequestHeaderEncodingSelector is unchanged.
2727
internal static readonly Func<string, Encoding> DefaultRequestHeaderEncodingSelector = _ => null;
28-
internal static readonly Func<string, Encoding> DefaultLatin1RequestHeaderEncodingSelector = _ => Encoding.Latin1;
2928

3029
private Func<string, Encoding> _requestHeaderEncodingSelector = DefaultRequestHeaderEncodingSelector;
3130

@@ -127,11 +126,6 @@ public Func<string, Encoding> RequestHeaderEncodingSelector
127126
/// </summary>
128127
internal bool IsDevCertLoaded { get; set; }
129128

130-
/// <summary>
131-
/// Treat request headers as Latin-1 or ISO/IEC 8859-1 instead of UTF-8.
132-
/// </summary>
133-
internal bool Latin1RequestHeaders { get; set; }
134-
135129
/// <summary>
136130
/// Specifies a configuration Action to run for each newly created endpoint. Calling this again will replace
137131
/// the prior action.
@@ -141,16 +135,6 @@ public void ConfigureEndpointDefaults(Action<ListenOptions> configureOptions)
141135
EndpointDefaults = configureOptions ?? throw new ArgumentNullException(nameof(configureOptions));
142136
}
143137

144-
internal Func<string, Encoding> GetRequestHeaderEncodingSelector()
145-
{
146-
if (ReferenceEquals(_requestHeaderEncodingSelector, DefaultRequestHeaderEncodingSelector) && Latin1RequestHeaders)
147-
{
148-
return DefaultLatin1RequestHeaderEncodingSelector;
149-
}
150-
151-
return _requestHeaderEncodingSelector;
152-
}
153-
154138
internal void ApplyEndpointDefaults(ListenOptions listenOptions)
155139
{
156140
listenOptions.KestrelServerOptions = this;

src/Servers/Kestrel/Core/test/HttpRequestHeadersTests.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ public void ValueReuseLatin1NotConfusedForUtf16AndStillRejected(bool reuseValue,
490490
[MemberData(nameof(KnownRequestHeaders))]
491491
public void Latin1ValuesAcceptedInLatin1ModeButNotReused(bool reuseValue, KnownHeader header)
492492
{
493-
var headers = new HttpRequestHeaders(reuseHeaderValues: reuseValue, KestrelServerOptions.DefaultLatin1RequestHeaderEncodingSelector);
493+
var headers = new HttpRequestHeaders(reuseHeaderValues: reuseValue, _ => Encoding.Latin1);
494494

495495
var headerValue = new char[127]; // 64 + 32 + 16 + 8 + 4 + 2 + 1
496496
for (var i = 0; i < headerValue.Length; i++)
@@ -546,12 +546,7 @@ public void Latin1ValuesAcceptedInLatin1ModeButNotReused(bool reuseValue, KnownH
546546
[MemberData(nameof(KnownRequestHeaders))]
547547
public void NullCharactersRejectedInUTF8AndLatin1Mode(bool useLatin1, KnownHeader header)
548548
{
549-
var kso = new KestrelServerOptions
550-
{
551-
Latin1RequestHeaders = useLatin1,
552-
};
553-
554-
var headers = new HttpRequestHeaders(encodingSelector: kso.GetRequestHeaderEncodingSelector());
549+
var headers = new HttpRequestHeaders(encodingSelector: useLatin1 ? _ => Encoding.Latin1 : (Func<string, Encoding>)null);
555550

556551
var valueArray = new char[127]; // 64 + 32 + 16 + 8 + 4 + 2 + 1
557552
for (var i = 0; i < valueArray.Length; i++)

src/Servers/Kestrel/Kestrel/test/KestrelConfigurationLoaderTests.cs

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -588,54 +588,6 @@ public void DefaultEndpointConfigureSection_ConfigureHttpsDefaultsCanOverrideSsl
588588
Assert.True(ran1);
589589
}
590590

591-
[Fact]
592-
public void Latin1RequestHeadersReadFromConfig()
593-
{
594-
var options = CreateServerOptions();
595-
var config = new ConfigurationBuilder().AddInMemoryCollection().Build();
596-
597-
Assert.False(options.Latin1RequestHeaders);
598-
options.Configure(config).Load();
599-
Assert.False(options.Latin1RequestHeaders);
600-
601-
options = CreateServerOptions();
602-
config = new ConfigurationBuilder().AddInMemoryCollection(new[]
603-
{
604-
new KeyValuePair<string, string>("Latin1RequestHeaders", "true"),
605-
}).Build();
606-
607-
Assert.False(options.Latin1RequestHeaders);
608-
options.Configure(config).Load();
609-
Assert.True(options.Latin1RequestHeaders);
610-
Assert.Same(KestrelServerOptions.DefaultLatin1RequestHeaderEncodingSelector, options.GetRequestHeaderEncodingSelector());
611-
}
612-
613-
[Fact]
614-
public void Latin1RequestHeadersReadFromConfigCanBeOverriddenBySettingRequestHeaderEncodingSelector()
615-
{
616-
var options = CreateServerOptions();
617-
var config = new ConfigurationBuilder().AddInMemoryCollection().Build();
618-
619-
Assert.False(options.Latin1RequestHeaders);
620-
options.Configure(config).Load();
621-
Assert.False(options.Latin1RequestHeaders);
622-
623-
options = CreateServerOptions();
624-
config = new ConfigurationBuilder().AddInMemoryCollection(new[]
625-
{
626-
new KeyValuePair<string, string>("Latin1RequestHeaders", "true"),
627-
}).Build();
628-
629-
Assert.False(options.Latin1RequestHeaders);
630-
options.Configure(config).Load();
631-
Assert.True(options.Latin1RequestHeaders);
632-
633-
Assert.NotSame(options.RequestHeaderEncodingSelector, options.GetRequestHeaderEncodingSelector());
634-
635-
options.RequestHeaderEncodingSelector = _ => Encoding.ASCII;
636-
Assert.Same(options.RequestHeaderEncodingSelector, options.GetRequestHeaderEncodingSelector());
637-
}
638-
639591
[Fact]
640592
public void Reload_IdentifiesEndpointsToStartAndStop()
641593
{

src/Servers/Kestrel/shared/KnownHeaders.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,7 @@ string GenerateIfBody(KnownHeader header, string extraIndent = "")
236236
if (header.Identifier == "ContentLength")
237237
{
238238
return $@"
239-
{extraIndent}if (ReferenceEquals(EncodingSelector, KestrelServerOptions.DefaultRequestHeaderEncodingSelector)
240-
{extraIndent} || ReferenceEquals(EncodingSelector, KestrelServerOptions.DefaultLatin1RequestHeaderEncodingSelector))
239+
{extraIndent}if (ReferenceEquals(EncodingSelector, KestrelServerOptions.DefaultRequestHeaderEncodingSelector))
241240
{extraIndent}{{
242241
{extraIndent} AppendContentLength(value);
243242
{extraIndent}}}

src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2StreamTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4609,7 +4609,7 @@ await WaitForStreamErrorAsync(1, Http2ErrorCode.NO_ERROR, expectedErrorMessage:
46094609
[Fact]
46104610
public async Task HEADERS_Received_Latin1_AcceptedWhenLatin1OptionIsConfigured()
46114611
{
4612-
_serviceContext.ServerOptions.Latin1RequestHeaders = true;
4612+
_serviceContext.ServerOptions.RequestHeaderEncodingSelector = _ => Encoding.Latin1;
46134613

46144614
await InitializeConnectionAsync(context =>
46154615
{

src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2TestBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ public override void Dispose()
407407
void IHttpHeadersHandler.OnHeader(ReadOnlySpan<byte> name, ReadOnlySpan<byte> value)
408408
{
409409
var nameStr = name.GetHeaderName();
410-
_decodedHeaders[nameStr] = value.GetRequestHeaderString(nameStr, _serviceContext.ServerOptions.GetRequestHeaderEncodingSelector());
410+
_decodedHeaders[nameStr] = value.GetRequestHeaderString(nameStr, _serviceContext.ServerOptions.RequestHeaderEncodingSelector);
411411
}
412412

413413
void IHttpHeadersHandler.OnHeadersComplete(bool endStream) { }

0 commit comments

Comments
 (0)