Skip to content

Commit da9d61e

Browse files
committed
Damn this H/2 Huffman non-sense, give me some strings please, not this binary soup
1 parent 1e6bb3c commit da9d61e

File tree

5 files changed

+12
-10
lines changed

5 files changed

+12
-10
lines changed

src/libraries/Common/tests/System/Net/Http/GenericLoopbackServer.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,14 +199,16 @@ public struct HttpHeaderData
199199
public string Value { get; }
200200
public bool HuffmanEncoded { get; }
201201
public byte[] Raw { get; }
202+
public int RawValueStart { get; }
202203
public Encoding ValueEncoding { get; }
203204

204-
public HttpHeaderData(string name, string value, bool huffmanEncoded = false, byte[] raw = null, Encoding valueEncoding = null)
205+
public HttpHeaderData(string name, string value, bool huffmanEncoded = false, byte[] raw = null, int rawValueStart = 0, Encoding valueEncoding = null)
205206
{
206207
Name = name;
207208
Value = value;
208209
HuffmanEncoded = huffmanEncoded;
209210
Raw = raw;
211+
RawValueStart = rawValueStart;
210212
ValueEncoding = valueEncoding;
211213
}
212214

src/libraries/Common/tests/System/Net/Http/Http2LoopbackConnection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,7 @@ private static (int bytesConsumed, HttpHeaderData headerData) DecodeLiteralHeade
535535
(bytesConsumed, value, bool huffmanEncoded) = DecodeString(headerBlock.Slice(i));
536536
i += bytesConsumed;
537537

538-
return (i, new HttpHeaderData(name, value, huffmanEncoded));
538+
return (i, new HttpHeaderData(name, value, huffmanEncoded, rawValueStart: i - bytesConsumed));
539539
}
540540

541541
private static (int bytesConsumed, HttpHeaderData headerData) DecodeHeader(ReadOnlySpan<byte> headerBlock)
@@ -680,7 +680,7 @@ public async IAsyncEnumerable<Frame> ReadRequestHeadersFrames()
680680
(int bytesConsumed, HttpHeaderData headerData) = DecodeHeader(data.Span.Slice(i));
681681

682682
byte[] headerRaw = data.Span.Slice(i, bytesConsumed).ToArray();
683-
headerData = new HttpHeaderData(headerData.Name, headerData.Value, headerData.HuffmanEncoded, headerRaw);
683+
headerData = new HttpHeaderData(headerData.Name, headerData.Value, headerData.HuffmanEncoded, headerRaw, headerData.RawValueStart);
684684

685685
requestData.Headers.Add(headerData);
686686
i += bytesConsumed;

src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2312,14 +2312,14 @@ string DecodeHeaderValue(string headerName)
23122312
{
23132313
var encoding = Encoding.GetEncoding("ISO-8859-1");
23142314
HttpHeaderData headerData = data.GetSingleHeaderData(headerName);
2315-
byte[] raw = headerData.Raw;
2315+
ReadOnlySpan<byte> raw = headerData.Raw.AsSpan().Slice(headerData.RawValueStart);
23162316
if (headerData.HuffmanEncoded)
23172317
{
23182318
byte[] buffer = new byte[raw.Length * 2];
2319-
int length = HuffmanDecoder.Decode(headerData.Raw, buffer);
2320-
raw = buffer.AsSpan().Slice(0, length).ToArray();
2319+
int length = HuffmanDecoder.Decode(raw, buffer);
2320+
raw = buffer.AsSpan().Slice(0, length);
23212321
}
2322-
return encoding.GetString(raw);
2322+
return encoding.GetString(raw.ToArray());
23232323
}
23242324
});
23252325
}

src/libraries/Common/tests/System/Net/Http/LoopbackServer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,7 @@ public override async Task<HttpRequestData> ReadRequestDataAsync(bool readBody =
812812
int offset = line.IndexOf(':');
813813
string name = line.Substring(0, offset);
814814
string value = line.Substring(offset + 1).TrimStart();
815-
requestData.Headers.Add(new HttpHeaderData(name, value, raw: lineBytes));
815+
requestData.Headers.Add(new HttpHeaderData(name, value, raw: lineBytes, rawValueStart: offset + 1));
816816
}
817817

818818
if (requestData.Method != "GET")

src/libraries/Common/tests/System/Net/Http/QPackTestDecoder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public static (int bytesConsumed, HttpHeaderData) DecodeHeader(ReadOnlySpan<byte
4242
(int valueLength, string value) = DecodeString(buffer.Slice(nameLength), 0b0111_1111);
4343

4444
int headerLength = nameLength + valueLength;
45-
var header = new HttpHeaderData(s_staticTable[staticIndex].Name, value, raw: buffer.Slice(0, headerLength).ToArray());
45+
var header = new HttpHeaderData(s_staticTable[staticIndex].Name, value, raw: buffer.Slice(0, headerLength).ToArray(), rawValueStart: nameLength);
4646

4747
return (headerLength, header);
4848
}
@@ -52,7 +52,7 @@ public static (int bytesConsumed, HttpHeaderData) DecodeHeader(ReadOnlySpan<byte
5252
(int valueLength, string value) = DecodeString(buffer.Slice(nameLength), 0b0111_1111);
5353

5454
int headerLength = nameLength + valueLength;
55-
var header = new HttpHeaderData(name, value, raw: buffer.Slice(0, headerLength).ToArray());
55+
var header = new HttpHeaderData(name, value, raw: buffer.Slice(0, headerLength).ToArray(), rawValueStart: nameLength);
5656

5757
return (headerLength, header);
5858
}

0 commit comments

Comments
 (0)