@@ -153,3 +153,97 @@ test('fail if headers is not an object or an array', async (t) => {
153153
154154 await t . completed
155155} )
156+
157+ test ( 'fail if duplicate content-length headers (different case)' , async ( t ) => {
158+ t = tspl ( t , { plan : 2 } )
159+ const headers = [ 'Content-Length' , '5' , 'content-length' , '0' ]
160+
161+ const server = createServer ( { joinDuplicateHeaders : true } , ( req , res ) => { res . end ( ) } )
162+ after ( ( ) => server . close ( ) )
163+ server . listen ( 0 , ( ) => {
164+ const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
165+ after ( ( ) => client . close ( ) )
166+
167+ client . request ( {
168+ path : '/' ,
169+ method : 'POST' ,
170+ headers,
171+ body : 'hello'
172+ } , ( err ) => {
173+ t . ok ( err instanceof errors . InvalidArgumentError )
174+ t . strictEqual ( err . message , 'duplicate content-length header' )
175+ } )
176+ } )
177+
178+ await t . completed
179+ } )
180+
181+ test ( 'fail if duplicate content-length headers (same case)' , async ( t ) => {
182+ t = tspl ( t , { plan : 2 } )
183+ const headers = [ 'content-length' , '5' , 'content-length' , '0' ]
184+
185+ const server = createServer ( { joinDuplicateHeaders : true } , ( req , res ) => { res . end ( ) } )
186+ after ( ( ) => server . close ( ) )
187+ server . listen ( 0 , ( ) => {
188+ const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
189+ after ( ( ) => client . close ( ) )
190+
191+ client . request ( {
192+ path : '/' ,
193+ method : 'POST' ,
194+ headers,
195+ body : 'hello'
196+ } , ( err ) => {
197+ t . ok ( err instanceof errors . InvalidArgumentError )
198+ t . strictEqual ( err . message , 'duplicate content-length header' )
199+ } )
200+ } )
201+
202+ await t . completed
203+ } )
204+
205+ test ( 'fail if duplicate host headers (different case)' , async ( t ) => {
206+ t = tspl ( t , { plan : 2 } )
207+ const headers = [ 'Host' , 'example.com' , 'host' , 'evil.com' ]
208+
209+ const server = createServer ( { joinDuplicateHeaders : true } , ( req , res ) => { res . end ( ) } )
210+ after ( ( ) => server . close ( ) )
211+ server . listen ( 0 , ( ) => {
212+ const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
213+ after ( ( ) => client . close ( ) )
214+
215+ client . request ( {
216+ path : '/' ,
217+ method : 'GET' ,
218+ headers
219+ } , ( err ) => {
220+ t . ok ( err instanceof errors . InvalidArgumentError )
221+ t . strictEqual ( err . message , 'duplicate host header' )
222+ } )
223+ } )
224+
225+ await t . completed
226+ } )
227+
228+ test ( 'fail if duplicate host headers (same case)' , async ( t ) => {
229+ t = tspl ( t , { plan : 2 } )
230+ const headers = [ 'host' , 'example.com' , 'host' , 'evil.com' ]
231+
232+ const server = createServer ( { joinDuplicateHeaders : true } , ( req , res ) => { res . end ( ) } )
233+ after ( ( ) => server . close ( ) )
234+ server . listen ( 0 , ( ) => {
235+ const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
236+ after ( ( ) => client . close ( ) )
237+
238+ client . request ( {
239+ path : '/' ,
240+ method : 'GET' ,
241+ headers
242+ } , ( err ) => {
243+ t . ok ( err instanceof errors . InvalidArgumentError )
244+ t . strictEqual ( err . message , 'duplicate host header' )
245+ } )
246+ } )
247+
248+ await t . completed
249+ } )
0 commit comments