Don't allow 101 HTTP status code because HTTP/2 removes HTTP Upgrade

This commit is contained in:
Tatsuhiro Tsujikawa 2018-03-11 15:37:30 +09:00
parent 4add618a3f
commit 842509dab6
2 changed files with 8 additions and 1 deletions

View File

@ -244,7 +244,7 @@ static int http_response_on_header(nghttp2_stream *stream, nghttp2_hd_nv *nv,
return NGHTTP2_ERR_HTTP_HEADER;
}
stream->status_code = (int16_t)parse_uint(nv->value->base, nv->value->len);
if (stream->status_code == -1) {
if (stream->status_code == -1 || stream->status_code == 101) {
return NGHTTP2_ERR_HTTP_HEADER;
}
break;

View File

@ -10437,6 +10437,7 @@ void test_nghttp2_http_mandatory_headers(void) {
MAKE_NV("content-length", "0")};
const nghttp2_nv clnonzero204_resnv[] = {MAKE_NV(":status", "204"),
MAKE_NV("content-length", "100")};
const nghttp2_nv status101_resnv[] = {MAKE_NV(":status", "101")};
/* test case for request */
const nghttp2_nv nopath_reqnv[] = {MAKE_NV(":scheme", "https"),
@ -10551,6 +10552,12 @@ void test_nghttp2_http_mandatory_headers(void) {
session, &deflater, 21, NGHTTP2_STREAM_OPENING, clnonzero204_resnv,
ARRLEN(clnonzero204_resnv));
/* status code 101 should not be used in HTTP/2 because it is used
for HTTP Upgrade which HTTP/2 removes. */
check_nghttp2_http_recv_headers_fail(session, &deflater, 23,
NGHTTP2_STREAM_OPENING, status101_resnv,
ARRLEN(status101_resnv));
nghttp2_hd_deflate_free(&deflater);
nghttp2_session_del(session);