diff options
| author | Wladimir J. van der Laan <[email protected]> | 2015-10-21 11:19:13 +0200 |
|---|---|---|
| committer | Wladimir J. van der Laan <[email protected]> | 2015-10-21 11:19:25 +0200 |
| commit | 0fbfc5106cd9866325b4a1ab3b9db8e91e54f070 (patch) | |
| tree | e6230f51d9d6f753b6d1f8242fa3ef70cdd9330a | |
| parent | Merge pull request #6722 (diff) | |
| parent | http: Restrict maximum size of request line + headers (diff) | |
| download | discoin-0fbfc5106cd9866325b4a1ab3b9db8e91e54f070.tar.xz discoin-0fbfc5106cd9866325b4a1ab3b9db8e91e54f070.zip | |
Merge pull request #6859
41db8c4 http: Restrict maximum size of request line + headers (Wladimir J. van der Laan)
| -rwxr-xr-x | qa/rpc-tests/httpbasics.py | 14 | ||||
| -rw-r--r-- | src/httpserver.cpp | 4 |
2 files changed, 18 insertions, 0 deletions
diff --git a/qa/rpc-tests/httpbasics.py b/qa/rpc-tests/httpbasics.py index b66533543..7888114c5 100755 --- a/qa/rpc-tests/httpbasics.py +++ b/qa/rpc-tests/httpbasics.py @@ -97,5 +97,19 @@ class HTTPBasicsTest (BitcoinTestFramework): assert_equal('"error":null' in out1, True) assert_equal(conn.sock!=None, True) #connection must be closed because bitcoind should use keep-alive by default + # Check excessive request size + conn = httplib.HTTPConnection(urlNode2.hostname, urlNode2.port) + conn.connect() + conn.request('GET', '/' + ('x'*1000), '', headers) + out1 = conn.getresponse() + assert_equal(out1.status, httplib.NOT_FOUND) + + conn = httplib.HTTPConnection(urlNode2.hostname, urlNode2.port) + conn.connect() + conn.request('GET', '/' + ('x'*10000), '', headers) + out1 = conn.getresponse() + assert_equal(out1.status, httplib.BAD_REQUEST) + + if __name__ == '__main__': HTTPBasicsTest ().main () diff --git a/src/httpserver.cpp b/src/httpserver.cpp index 0a7f903e9..8698abb90 100644 --- a/src/httpserver.cpp +++ b/src/httpserver.cpp @@ -38,6 +38,9 @@ #include <boost/foreach.hpp> #include <boost/scoped_ptr.hpp> +/** Maximum size of http request (request line + headers) */ +static const size_t MAX_HEADERS_SIZE = 8192; + /** HTTP request work item */ class HTTPWorkItem : public HTTPClosure { @@ -414,6 +417,7 @@ bool InitHTTPServer() } evhttp_set_timeout(http, GetArg("-rpcservertimeout", DEFAULT_HTTP_SERVER_TIMEOUT)); + evhttp_set_max_headers_size(http, MAX_HEADERS_SIZE); evhttp_set_max_body_size(http, MAX_SIZE); evhttp_set_gencb(http, http_request_cb, NULL); |