Просмотр исходного кода

Don't send a GOAWAY frame on close when the h2 preface is invalid

Loïc Hoguin 7 лет назад
Родитель
Сommit
0246d9a4e6
1 измененных файлов с 3 добавлено и 1 удалено
  1. 3 1
      src/cowboy_http2.erl

+ 3 - 1
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