If the header from the client is invalid, just ignore it and build a pipeline with no sessions.

This commit is contained in:
James Coglan
2015-03-14 12:56:48 +00:00
parent dd6cff6c09
commit b9da251798
2 changed files with 16 additions and 9 deletions
+12 -8
View File
@@ -98,19 +98,23 @@ module WebSocket
end
def generate_response(header)
offers = Parser.parse_header(header)
sessions = []
response = []
@in_order.each do |ext|
offer = offers.by_name(ext.name)
next if offer.empty? or reserved?(ext)
begin
offers = Parser.parse_header(header)
next unless session = ext.create_server_session(offer)
@in_order.each do |ext|
offer = offers.by_name(ext.name)
next if offer.empty? or reserved?(ext)
reserve(ext)
sessions.push([ext, session])
response.push(Parser.serialize_params(ext.name, session.generate_response))
next unless session = ext.create_server_session(offer)
reserve(ext)
sessions.push([ext, session])
response.push(Parser.serialize_params(ext.name, session.generate_response))
end
rescue
end
@sessions = sessions
+4 -1
View File
@@ -325,11 +325,14 @@ describe WebSocket::Extensions do
expect(@extensions.generate_response("deflate, tar")).to eq "deflate; mode=compress"
end
it "returns an empty response if the header is invalid" do
expect(@extensions.generate_response("x-webkit- -frame")).to be_nil
end
it "returns a response for potentially conflicting extensions if their preceeding extensions don't build a session" do
allow(@ext).to receive(:create_server_session).and_return(nil)
expect(@extensions.generate_response("deflate, tar")).to eq "tar; gzip"
end
end
end
end