Skip to content

Commit 8a4b4de

Browse files
authored
Fix Integer Overflow in Header Processing (#41757)
1 parent 5d9bded commit 8a4b4de

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ protected override void OnReset()
636636
_requestTimedOut = false;
637637
_requestTargetForm = HttpRequestTarget.Unknown;
638638
_absoluteRequestTarget = null;
639-
_remainingRequestHeadersBytesAllowed = ServerOptions.Limits.MaxRequestHeadersTotalSize + 2;
639+
_remainingRequestHeadersBytesAllowed = (long)ServerOptions.Limits.MaxRequestHeadersTotalSize + 2;
640640

641641
MinResponseDataRate = ServerOptions.Limits.MinResponseDataRate;
642642

src/Servers/Kestrel/Core/test/Http1/Http1ConnectionTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,17 @@ public async Task TakeMessageHeadersThrowsWhenHeaderValueContainsExtendedASCII()
5555
var exception = Assert.Throws<InvalidOperationException>(() => TakeMessageHeaders(readableBuffer, trailers: false, out _consumed, out _examined));
5656
}
5757

58+
[Fact]
59+
public async Task MaxRequestHeadersTotalSizeDoesNotThrowForMaxValue()
60+
{
61+
const string headerLine = "Header: value\r\n";
62+
_serviceContext.ServerOptions.Limits.MaxRequestHeadersTotalSize = int.MaxValue;
63+
_http1Connection.Reset();
64+
65+
await _application.Output.WriteAsync(Encoding.ASCII.GetBytes($"{headerLine}\r\n"));
66+
var readableBuffer = (await _transport.Input.ReadAsync()).Buffer;
67+
}
68+
5869
[Fact]
5970
public async Task TakeMessageHeadersThrowsWhenHeadersExceedTotalSizeLimit()
6071
{

0 commit comments

Comments
 (0)