@@ -25,11 +25,11 @@ public class QPackDecoderTests
25
25
// 4.5.4 - Literal Header Field With Name Reference - Static Table - Index 44 (content-type)
26
26
private static readonly byte [ ] _literalHeaderFieldWithNameReferenceStatic = new byte [ ] { 0x5f , 0x1d } ;
27
27
28
- // 4.5.6 - Literal Field Line With Literal Name - (translate )
29
- private static readonly byte [ ] _literalFieldLineWithLiteralName = new byte [ ] { 0x37 , 0x02 , 0x74 , 0x72 , 0x61 , 0x6e , 0x73 , 0x6c , 0x61 , 0x74 , 0x65 } ;
28
+ // 4.5.6 - Literal Field Line With Literal Name - (literal-header-field )
29
+ private static readonly byte [ ] _literalFieldLineWithLiteralName = new byte [ ] { 0x37 , 0x0d , 0x6c , 0x69 , 0x74 , 0x65 , 0x72 , 0x61 , 0x6c , 0x2d , 0x68 , 0x65 , 0x61 , 0x64 , 0x65 , 0x72 , 0x2d , 0x66 , 0x69 , 0x65 , 0x6c , 0x64 } ;
30
30
31
31
private const string _contentTypeString = "content-type" ;
32
- private const string _translateString = "translate " ;
32
+ private const string _literalHeaderFieldString = "literal-header-field " ;
33
33
34
34
// n e w - h e a d e r *
35
35
// 10101000 10111110 00010110 10011100 10100011 10010000 10110110 01111111
@@ -97,7 +97,7 @@ public void DecodesLiteralFieldLineWithLiteralName_Value()
97
97
. Concat ( _headerValue )
98
98
. ToArray ( ) ;
99
99
100
- TestDecodeWithoutIndexing ( encoded , _translateString , _headerValueString ) ;
100
+ TestDecodeWithoutIndexing ( encoded , _literalHeaderFieldString , _headerValueString ) ;
101
101
}
102
102
103
103
[ Fact ]
@@ -140,7 +140,7 @@ public void DecodesLiteralFieldLineWithLiteralName_HuffmanEncodedValue()
140
140
. Concat ( _headerValueHuffman )
141
141
. ToArray ( ) ;
142
142
143
- TestDecodeWithoutIndexing ( encoded , _translateString , _headerValueString ) ;
143
+ TestDecodeWithoutIndexing ( encoded , _literalHeaderFieldString , _headerValueString ) ;
144
144
}
145
145
146
146
[ Fact ]
@@ -173,6 +173,101 @@ public void DecodesLiteralFieldLineWithLiteralName_LargeValues()
173
173
} ) ;
174
174
}
175
175
176
+ [ Fact ]
177
+ public void LiteralFieldWithoutNameReference_SingleBuffer ( )
178
+ {
179
+ byte [ ] encoded = _literalFieldLineWithLiteralName
180
+ . Concat ( _headerValue )
181
+ . ToArray ( ) ;
182
+
183
+ _decoder . Decode ( new byte [ ] { 0x00 , 0x00 } , endHeaders : false , handler : _handler ) ;
184
+ _decoder . Decode ( encoded , endHeaders : true , handler : _handler ) ;
185
+
186
+ Assert . Equal ( 1 , _handler . DecodedHeaders . Count ) ;
187
+ Assert . True ( _handler . DecodedHeaders . ContainsKey ( _literalHeaderFieldString ) ) ;
188
+ Assert . Equal ( _headerValueString , _handler . DecodedHeaders [ _literalHeaderFieldString ] ) ;
189
+ }
190
+
191
+ [ Fact ]
192
+ public void LiteralFieldWithoutNameReference_NameLengthBrokenIntoSeparateBuffers ( )
193
+ {
194
+ byte [ ] encoded = _literalFieldLineWithLiteralName
195
+ . Concat ( _headerValue )
196
+ . ToArray ( ) ;
197
+
198
+ _decoder . Decode ( new byte [ ] { 0x00 , 0x00 } , endHeaders : false , handler : _handler ) ;
199
+ _decoder . Decode ( encoded [ ..1 ] , endHeaders : false , handler : _handler ) ;
200
+ _decoder . Decode ( encoded [ 1 ..] , endHeaders : true , handler : _handler ) ;
201
+
202
+ Assert . Equal ( 1 , _handler . DecodedHeaders . Count ) ;
203
+ Assert . True ( _handler . DecodedHeaders . ContainsKey ( _literalHeaderFieldString ) ) ;
204
+ Assert . Equal ( _headerValueString , _handler . DecodedHeaders [ _literalHeaderFieldString ] ) ;
205
+ }
206
+
207
+ [ Fact ]
208
+ public void LiteralFieldWithoutNameReference_NameBrokenIntoSeparateBuffers ( )
209
+ {
210
+ byte [ ] encoded = _literalFieldLineWithLiteralName
211
+ . Concat ( _headerValue )
212
+ . ToArray ( ) ;
213
+
214
+ _decoder . Decode ( new byte [ ] { 0x00 , 0x00 } , endHeaders : false , handler : _handler ) ;
215
+ _decoder . Decode ( encoded [ ..( _literalHeaderFieldString . Length / 2 ) ] , endHeaders : false , handler : _handler ) ;
216
+ _decoder . Decode ( encoded [ ( _literalHeaderFieldString . Length / 2 ) ..] , endHeaders : true , handler : _handler ) ;
217
+
218
+ Assert . Equal ( 1 , _handler . DecodedHeaders . Count ) ;
219
+ Assert . True ( _handler . DecodedHeaders . ContainsKey ( _literalHeaderFieldString ) ) ;
220
+ Assert . Equal ( _headerValueString , _handler . DecodedHeaders [ _literalHeaderFieldString ] ) ;
221
+ }
222
+
223
+ [ Fact ]
224
+ public void LiteralFieldWithoutNameReference_NameAndValueBrokenIntoSeparateBuffers ( )
225
+ {
226
+ byte [ ] encoded = _literalFieldLineWithLiteralName
227
+ . Concat ( _headerValue )
228
+ . ToArray ( ) ;
229
+
230
+ _decoder . Decode ( new byte [ ] { 0x00 , 0x00 } , endHeaders : false , handler : _handler ) ;
231
+ _decoder . Decode ( encoded [ ..^ _headerValue . Length ] , endHeaders : false , handler : _handler ) ;
232
+ _decoder . Decode ( encoded [ ^ _headerValue . Length ..] , endHeaders : true , handler : _handler ) ;
233
+
234
+ Assert . Equal ( 1 , _handler . DecodedHeaders . Count ) ;
235
+ Assert . True ( _handler . DecodedHeaders . ContainsKey ( _literalHeaderFieldString ) ) ;
236
+ Assert . Equal ( _headerValueString , _handler . DecodedHeaders [ _literalHeaderFieldString ] ) ;
237
+ }
238
+
239
+ [ Fact ]
240
+ public void LiteralFieldWithoutNameReference_ValueLengthBrokenIntoSeparateBuffers ( )
241
+ {
242
+ byte [ ] encoded = _literalFieldLineWithLiteralName
243
+ . Concat ( _headerValue )
244
+ . ToArray ( ) ;
245
+
246
+ _decoder . Decode ( new byte [ ] { 0x00 , 0x00 } , endHeaders : false , handler : _handler ) ;
247
+ _decoder . Decode ( encoded [ ..^ ( _headerValue . Length - 1 ) ] , endHeaders : false , handler : _handler ) ;
248
+ _decoder . Decode ( encoded [ ^ ( _headerValue . Length - 1 ) ..] , endHeaders : true , handler : _handler ) ;
249
+
250
+ Assert . Equal ( 1 , _handler . DecodedHeaders . Count ) ;
251
+ Assert . True ( _handler . DecodedHeaders . ContainsKey ( _literalHeaderFieldString ) ) ;
252
+ Assert . Equal ( _headerValueString , _handler . DecodedHeaders [ _literalHeaderFieldString ] ) ;
253
+ }
254
+
255
+ [ Fact ]
256
+ public void LiteralFieldWithoutNameReference_ValueBrokenIntoSeparateBuffers ( )
257
+ {
258
+ byte [ ] encoded = _literalFieldLineWithLiteralName
259
+ . Concat ( _headerValue )
260
+ . ToArray ( ) ;
261
+
262
+ _decoder . Decode ( new byte [ ] { 0x00 , 0x00 } , endHeaders : false , handler : _handler ) ;
263
+ _decoder . Decode ( encoded [ ..^ ( _headerValueString . Length / 2 ) ] , endHeaders : false , handler : _handler ) ;
264
+ _decoder . Decode ( encoded [ ^ ( _headerValueString . Length / 2 ) ..] , endHeaders : true , handler : _handler ) ;
265
+
266
+ Assert . Equal ( 1 , _handler . DecodedHeaders . Count ) ;
267
+ Assert . True ( _handler . DecodedHeaders . ContainsKey ( _literalHeaderFieldString ) ) ;
268
+ Assert . Equal ( _headerValueString , _handler . DecodedHeaders [ _literalHeaderFieldString ] ) ;
269
+ }
270
+
176
271
public static readonly TheoryData < byte [ ] > _incompleteHeaderBlockData = new TheoryData < byte [ ] >
177
272
{
178
273
// Incomplete header
0 commit comments