diff --git a/lib/nghttp2_session.c b/lib/nghttp2_session.c index f45abcc9..07eee480 100644 --- a/lib/nghttp2_session.c +++ b/lib/nghttp2_session.c @@ -3951,9 +3951,13 @@ static int session_on_connection_window_update_received(nghttp2_session *session, nghttp2_frame *frame) { /* Handle connection-level flow control */ - if (frame->window_update.window_size_increment == 0 || - NGHTTP2_MAX_WINDOW_SIZE - frame->window_update.window_size_increment < - session->remote_window_size) { + if (frame->window_update.window_size_increment == 0) { + return session_handle_invalid_connection(session, frame, + NGHTTP2_PROTOCOL_ERROR, NULL); + } + + if (NGHTTP2_MAX_WINDOW_SIZE - frame->window_update.window_size_increment < + session->remote_window_size) { return session_handle_invalid_connection(session, frame, NGHTTP2_FLOW_CONTROL_ERROR, NULL); } @@ -3980,9 +3984,12 @@ static int session_on_stream_window_update_received(nghttp2_session *session, session, frame, NGHTTP2_PROTOCOL_ERROR, "WINDOW_UPADATE to reserved stream"); } - if (frame->window_update.window_size_increment == 0 || - NGHTTP2_MAX_WINDOW_SIZE - frame->window_update.window_size_increment < - stream->remote_window_size) { + if (frame->window_update.window_size_increment == 0) { + return session_handle_invalid_stream(session, frame, + NGHTTP2_PROTOCOL_ERROR); + } + if (NGHTTP2_MAX_WINDOW_SIZE - frame->window_update.window_size_increment < + stream->remote_window_size) { return session_handle_invalid_stream(session, frame, NGHTTP2_FLOW_CONTROL_ERROR); }