@@ -274,6 +274,31 @@ defmodule WebSocketHTTP1HandshakeTest do
274274 refute Keyword . get ( headers , :"sec-websocket-extensions" )
275275 end
276276
277+ test "declines permessage-deflate offers containing the internal max_inflate_ratio option" ,
278+ context do
279+ client = SimpleWebSocketClient . tcp_client ( context )
280+
281+ SimpleHTTP1Client . send ( client , "GET" , "/compress" , [
282+ "Host: server.example.com" ,
283+ "Upgrade: WeBsOcKeT" ,
284+ "Connection: UpGrAdE" ,
285+ "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" ,
286+ "Sec-WebSocket-Version: 13" ,
287+ "Sec-WebSocket-Extensions: permessage-deflate;max_inflate_ratio=5"
288+ ] )
289+
290+ assert { :ok , "101 Switching Protocols" , headers , << >> } =
291+ SimpleHTTP1Client . recv_reply ( client )
292+
293+ assert Keyword . get ( headers , :upgrade ) == "websocket"
294+ assert Keyword . get ( headers , :connection ) == "Upgrade"
295+ assert Keyword . get ( headers , :"sec-websocket-accept" ) == "s3pPLMBiTxaQ9kYGzzhZRbK+xOo="
296+
297+ # max_inflate_ratio is a Bandit config option, not an RFC7692 extension parameter;
298+ # an offer containing it is declined (and it must never be echoed in the response)
299+ refute Keyword . get ( headers , :"sec-websocket-extensions" )
300+ end
301+
277302 test "does not negotiate permessage-deflate if the client sends repeat option values" ,
278303 context do
279304 client = SimpleWebSocketClient . tcp_client ( context )
0 commit comments