Skip to content

Commit 0fbfc51

Browse files
committed
Merge pull request #6859
41db8c4 http: Restrict maximum size of request line + headers (Wladimir J. van der Laan)
2 parents 3b20e23 + 41db8c4 commit 0fbfc51

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

qa/rpc-tests/httpbasics.py

+14
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,19 @@ def run_test(self):
9797
assert_equal('"error":null' in out1, True)
9898
assert_equal(conn.sock!=None, True) #connection must be closed because bitcoind should use keep-alive by default
9999

100+
# Check excessive request size
101+
conn = httplib.HTTPConnection(urlNode2.hostname, urlNode2.port)
102+
conn.connect()
103+
conn.request('GET', '/' + ('x'*1000), '', headers)
104+
out1 = conn.getresponse()
105+
assert_equal(out1.status, httplib.NOT_FOUND)
106+
107+
conn = httplib.HTTPConnection(urlNode2.hostname, urlNode2.port)
108+
conn.connect()
109+
conn.request('GET', '/' + ('x'*10000), '', headers)
110+
out1 = conn.getresponse()
111+
assert_equal(out1.status, httplib.BAD_REQUEST)
112+
113+
100114
if __name__ == '__main__':
101115
HTTPBasicsTest ().main ()

src/httpserver.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
#include <boost/foreach.hpp>
3939
#include <boost/scoped_ptr.hpp>
4040

41+
/** Maximum size of http request (request line + headers) */
42+
static const size_t MAX_HEADERS_SIZE = 8192;
43+
4144
/** HTTP request work item */
4245
class HTTPWorkItem : public HTTPClosure
4346
{
@@ -414,6 +417,7 @@ bool InitHTTPServer()
414417
}
415418

416419
evhttp_set_timeout(http, GetArg("-rpcservertimeout", DEFAULT_HTTP_SERVER_TIMEOUT));
420+
evhttp_set_max_headers_size(http, MAX_HEADERS_SIZE);
417421
evhttp_set_max_body_size(http, MAX_SIZE);
418422
evhttp_set_gencb(http, http_request_cb, NULL);
419423

0 commit comments

Comments
 (0)