Skip to content

Commit

Permalink
Fix a crash in websocket_handshake/3 with hixie-76
Browse files Browse the repository at this point in the history
Happened when an error occurred while trying to read the body to
get the key. Also fixes all the dialyzer warnings in cowboy_http_websocket.
  • Loading branch information
Loïc Hoguin committed Dec 6, 2011
1 parent 3649b0e commit a12a910
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions src/cowboy_http_websocket.erl
Expand Up @@ -178,11 +178,15 @@ websocket_handshake(State=#state{version=0, origin=Origin,
%% We replied with a proper response. Proxies should be happy enough,
%% we can now read the 8 last bytes of the challenge keys and send
%% the challenge response directly to the socket.
{ok, Key3, Req3} = cowboy_http_req:body(8, Req2),
Challenge = hixie76_challenge(Key1, Key2, Key3),
Transport:send(Socket, Challenge),
handler_before_loop(State#state{messages=Transport:messages()},
Req3, HandlerState, <<>>);
case cowboy_http_req:body(8, Req2) of
{ok, Key3, Req3} ->
Challenge = hixie76_challenge(Key1, Key2, Key3),
Transport:send(Socket, Challenge),
handler_before_loop(State#state{messages=Transport:messages()},
Req3, HandlerState, <<>>);
_Any ->
ok %% If an error happened reading the body, stop there.
end;
websocket_handshake(State=#state{challenge=Challenge},
Req=#http_req{transport=Transport}, HandlerState) ->
{ok, Req2} = cowboy_http_req:upgrade_reply(
Expand Down

0 comments on commit a12a910

Please sign in to comment.