From 42c95b1584c245d73e6ddc052a922c8e7c68dee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Tue, 3 Jan 2017 18:07:39 +0100 Subject: Rewrite the tests for header name/value limits Putting them in the correct test suite, with the proper documentation etc. --- test/http_SUITE.erl | 14 -------------- test/rfc7230_SUITE.erl | 41 +++++++++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/test/http_SUITE.erl b/test/http_SUITE.erl index e47557e..1fa583a 100644 --- a/test/http_SUITE.erl +++ b/test/http_SUITE.erl @@ -307,20 +307,6 @@ echo_body(Config) -> end || Size <- lists:seq(MTU - 500, MTU)], ok. -%% Check if sending request whose header name is bigger than 64 bytes causes 431 -echo_body_max_header_name_length(Config) -> - ConnPid = gun_open(Config), - Ref = gun:post(ConnPid, "/echo/body", [{binary:copy(<<$a>>, 32768), <<"bad">>}], << "echo=name" >>), - {response, fin, 431, _} = gun:await(ConnPid, Ref), - ok. - -%% Check if sending request whose header name is bigger than 64 bytes causes 431 -echo_body_max_header_value_length(Config) -> - ConnPid = gun_open(Config), - Ref = gun:post(ConnPid, "/echo/body", [{<<"bad">>, binary:copy(<<$a>>, 32768)}], << "echo=name" >>), - {response, fin, 431, _} = gun:await(ConnPid, Ref), - ok. - %% Check if sending request whose size is bigger than 1000000 bytes causes 413 echo_body_max_length(Config) -> ConnPid = gun_open(Config), diff --git a/test/rfc7230_SUITE.erl b/test/rfc7230_SUITE.erl index 22d2c37..5199795 100644 --- a/test/rfc7230_SUITE.erl +++ b/test/rfc7230_SUITE.erl @@ -726,20 +726,33 @@ reject_invalid_whitespace_after_version(Config) -> %Messages that contain whitespace between the header name and %colon must be rejected with a 400 status code and the closing %of the connection. (RFC7230 3.2.4) -% -%limit_header_name(Config) -> -%The header name must be subject to a configurable limit. A -%good default is 50 characters, well above the longest registered -%header. Such a request must be rejected with a 431 status code -%and the closing of the connection. (RFC7230 3.2.5, RFC6585 5, IANA Message Headers registry) -% -%limit_header_value(Config) -> -%The header value and the optional whitespace around it must be -%subject to a configurable limit. There is no recommendations -%for the default. 4096 characters is known to work well. Such -%a request must be rejected with a 431 status code and the closing -%of the connection. (RFC7230 3.2.5, RFC6585 5) -% + +limit_header_name(Config) -> + doc("The header name must be subject to a configurable limit. A " + "good default is 50 characters, well above the longest registered " + "header. Such a request must be rejected with a 431 status code " + "and the closing of the connection. " + "(RFC7230 3.2.5, RFC6585 5, IANA Message Headers registry)"), + #{code := 431, client := Client} = do_raw(Config, [ + "GET / HTTP/1.1\r\n" + "Host: localhost\r\n", + binary:copy(<<$a>>, 32768), ": bad\r\n" + "\r\n"]), + {error, closed} = raw_recv(Client, 0, 1000). + +limit_header_value(Config) -> + doc("The header value and the optional whitespace around it must be " + "subject to a configurable limit. There is no recommendations " + "for the default. 4096 characters is known to work well. Such " + "a request must be rejected with a 431 status code and the closing " + "of the connection. (RFC7230 3.2.5, RFC6585 5)"), + #{code := 431, client := Client} = do_raw(Config, [ + "GET / HTTP/1.1\r\n" + "Host: localhost\r\n" + "bad: ", binary:copy(<<$a>>, 32768), "\r\n" + "\r\n"]), + {error, closed} = raw_recv(Client, 0, 1000). + %drop_whitespace_before_header_value(Config) -> %drop_whitespace_after_header_value(Config) -> %Optional whitespace before and after the header value is not -- cgit v1.2.3