From 7ed93fa9211fcb8719fde13c540a46aa5b5d74fe Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Wed, 6 Jan 2021 08:12:22 +1300 Subject: [PATCH] HTTP/3: Header encoding and decoding fixes (#46565) --- .../src/System/Net/Http/aspnetcore/Http3/QPack/QPackDecoder.cs | 2 ++ .../src/System/Net/Http/aspnetcore/Http3/QPack/QPackEncoder.cs | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libraries/Common/src/System/Net/Http/aspnetcore/Http3/QPack/QPackDecoder.cs b/src/libraries/Common/src/System/Net/Http/aspnetcore/Http3/QPack/QPackDecoder.cs index 2d50916..a500c9b 100644 --- a/src/libraries/Common/src/System/Net/Http/aspnetcore/Http3/QPack/QPackDecoder.cs +++ b/src/libraries/Common/src/System/Net/Http/aspnetcore/Http3/QPack/QPackDecoder.cs @@ -173,6 +173,8 @@ namespace System.Net.Http.QPack { Decode(segment.Span, handler); } + + _state = State.RequiredInsertCount; } public void Decode(ReadOnlySpan headerBlock, IHttpHeadersHandler handler) diff --git a/src/libraries/Common/src/System/Net/Http/aspnetcore/Http3/QPack/QPackEncoder.cs b/src/libraries/Common/src/System/Net/Http/aspnetcore/Http3/QPack/QPackEncoder.cs index 68e04ed..97b85b4 100644 --- a/src/libraries/Common/src/System/Net/Http/aspnetcore/Http3/QPack/QPackEncoder.cs +++ b/src/libraries/Common/src/System/Net/Http/aspnetcore/Http3/QPack/QPackEncoder.cs @@ -477,9 +477,8 @@ namespace System.Net.Http.QPack case 400: case 404: case 500: - // TODO this isn't safe, some index can be larger than 64. Encoded here! - buffer[0] = (byte)(0xC0 | H3StaticTable.StatusIndex[statusCode]); - return 1; + EncodeStaticIndexedHeaderField(H3StaticTable.StatusIndex[statusCode], buffer, out var bytesWritten); + return bytesWritten; default: // Send as Literal Header Field Without Indexing - Indexed Name buffer[0] = 0x08; -- 2.7.4