From f705b2aec439be443ea9f1a4b99407a11352cccb Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 10 Dec 2014 01:02:30 +0900 Subject: [PATCH] Use NGHTTP2_PROTOCOL_ERROR for WINDOW_UPDATE with increments == 0 --- lib/nghttp2_session.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) 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); }