From 0246d9a4e652a78396e8753487131af73b36b7f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Wed, 29 Nov 2017 17:49:42 +0100 Subject: Don't send a GOAWAY frame on close when the h2 preface is invalid --- src/cowboy_http2.erl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cowboy_http2.erl b/src/cowboy_http2.erl index 8011196..81e2a88 100644 --- a/src/cowboy_http2.erl +++ b/src/cowboy_http2.erl @@ -274,7 +274,6 @@ parse(State=#state{socket=Socket, transport=Transport, parse_state={preface, seq << Preface:Len/binary, _/bits >> = <<"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n">>, case Data of Preface -> - %% @todo OK we should have a timeout when waiting for the preface. before_loop(State, Data); _ -> Transport:close(Socket), @@ -795,6 +794,9 @@ headers_encode(Headers0, EncodeState) -> -spec terminate(#state{}, _) -> no_return(). terminate(undefined, Reason) -> exit({shutdown, Reason}); +terminate(#state{socket=Socket, transport=Transport, parse_state={preface, _, _}}, Reason) -> + Transport:close(Socket), + exit({shutdown, Reason}); terminate(#state{socket=Socket, transport=Transport, client_streamid=LastStreamID, streams=Streams, children=Children}, Reason) -> %% @todo We might want to optionally send the Reason value -- cgit v1.2.3