Skip to content

Commit

Permalink
If the header from the client is invalid, just ignore it and build a …
Browse files Browse the repository at this point in the history
…pipeline with no sessions.
  • Loading branch information
jcoglan committed Mar 14, 2015
1 parent dd6cff6 commit b9da251
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 9 deletions.
20 changes: 12 additions & 8 deletions lib/websocket/extensions.rb
Expand Up @@ -98,19 +98,23 @@ def activate(header)
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
Expand Down
5 changes: 4 additions & 1 deletion spec/websocket/extensions_spec.rb
Expand Up @@ -325,11 +325,14 @@
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

0 comments on commit b9da251

Please sign in to comment.