[core] do not pass srv to http header parsing func
srv is retrieved from con->srv in the few cases where needed
This commit is contained in:
parent
80d12919d1
commit
c22ec74770
|
@ -699,7 +699,8 @@ static int connection_reset(server *srv, connection *con) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int connection_read_header(server *srv, connection *con) {
|
||||
static int connection_read_header(connection *con) {
|
||||
server *srv = con->srv;
|
||||
chunkqueue * const cq = con->read_queue;
|
||||
chunk *c;
|
||||
size_t hlen = 0;
|
||||
|
@ -789,7 +790,7 @@ static int connection_read_header(server *srv, connection *con) {
|
|||
save = buffer_init_buffer(con->request.request);
|
||||
}
|
||||
|
||||
con->http_status = http_request_parse(srv, con, con->request.request);
|
||||
con->http_status = http_request_parse(con, con->request.request);
|
||||
if (0 != con->http_status) {
|
||||
con->keep_alive = 0;
|
||||
con->request.content_length = 0;
|
||||
|
@ -825,7 +826,7 @@ static int connection_handle_read_state(server *srv, connection *con) {
|
|||
if (!chunkqueue_is_empty(con->read_queue)) {
|
||||
/*(if partially read next request and unable to read() any bytes below,
|
||||
* then will unnecessarily scan again here before subsequent read())*/
|
||||
if (connection_read_header(srv, con)) {
|
||||
if (connection_read_header(con)) {
|
||||
con->read_idle_ts = srv->cur_ts;
|
||||
connection_set_state(srv, con, CON_STATE_REQUEST_END);
|
||||
return 1;
|
||||
|
@ -849,7 +850,7 @@ static int connection_handle_read_state(server *srv, connection *con) {
|
|||
}
|
||||
}
|
||||
|
||||
if (connection_read_header(srv, con)) {
|
||||
if (connection_read_header(con)) {
|
||||
connection_set_state(srv, con, CON_STATE_REQUEST_END);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -759,7 +759,8 @@ static int http_request_parse_headers(server *srv, connection *con, buffer *hdrs
|
|||
return 0;
|
||||
}
|
||||
|
||||
int http_request_parse(server *srv, connection *con, buffer *hdrs) {
|
||||
int http_request_parse(connection *con, buffer *hdrs) {
|
||||
server *srv = con->srv;
|
||||
int status;
|
||||
|
||||
parse_header_state state;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include "base_decls.h"
|
||||
#include "buffer.h"
|
||||
|
||||
int http_request_parse(server *srv, connection *con, buffer *hdrs);
|
||||
int http_request_parse(connection *con, buffer *hdrs);
|
||||
int http_request_host_normalize(buffer *b, int scheme_port);
|
||||
int http_request_host_policy(connection *con, buffer *b, const buffer *scheme);
|
||||
|
||||
|
|
|
@ -27,12 +27,12 @@ static void test_request_connection_reset(connection *con)
|
|||
array_reset(con->request.headers);
|
||||
}
|
||||
|
||||
static void run_http_request_parse(server *srv, connection *con, int line, int status, const char *desc, const char *req, size_t reqlen)
|
||||
static void run_http_request_parse(connection *con, int line, int status, const char *desc, const char *req, size_t reqlen)
|
||||
{
|
||||
int http_status;
|
||||
test_request_connection_reset(con);
|
||||
buffer_copy_string_len(con->request.request, req, reqlen);
|
||||
http_status = http_request_parse(srv, con, con->request.request);
|
||||
http_status = http_request_parse(con, con->request.request);
|
||||
if (http_status != status) {
|
||||
fprintf(stderr,
|
||||
"%s.%d: %s() failed: expected '%d', got '%d' for test %s\n",
|
||||
|
@ -43,11 +43,11 @@ static void run_http_request_parse(server *srv, connection *con, int line, int s
|
|||
}
|
||||
}
|
||||
|
||||
static void test_request_http_request_parse(server *srv, connection *con)
|
||||
static void test_request_http_request_parse(connection *con)
|
||||
{
|
||||
data_string *ds;
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"hostname",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: www.example.org\r\n"
|
||||
|
@ -55,7 +55,7 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(buffer_is_equal_string(con->request.http_host,
|
||||
CONST_STR_LEN("www.example.org")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"IPv4 address",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: 127.0.0.1\r\n"
|
||||
|
@ -63,7 +63,7 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(buffer_is_equal_string(con->request.http_host,
|
||||
CONST_STR_LEN("127.0.0.1")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"IPv6 address",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: [::1]\r\n"
|
||||
|
@ -71,7 +71,7 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(buffer_is_equal_string(con->request.http_host,
|
||||
CONST_STR_LEN("[::1]")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"hostname + port",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: www.example.org:80\r\n"
|
||||
|
@ -79,7 +79,7 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(buffer_is_equal_string(con->request.http_host,
|
||||
CONST_STR_LEN("www.example.org")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"IPv4 address + port",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: 127.0.0.1:80\r\n"
|
||||
|
@ -87,7 +87,7 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(buffer_is_equal_string(con->request.http_host,
|
||||
CONST_STR_LEN("127.0.0.1")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"IPv6 address + port",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: [::1]:80\r\n"
|
||||
|
@ -95,19 +95,19 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(buffer_is_equal_string(con->request.http_host,
|
||||
CONST_STR_LEN("[::1]")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"directory traversal",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: ../123.org\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"leading and trailing dot",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: .jsdh.sfdg.sdfg.\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"trailing dot is ok",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: jsdh.sfdg.sdfg.\r\n"
|
||||
|
@ -115,43 +115,43 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(buffer_is_equal_string(con->request.http_host,
|
||||
CONST_STR_LEN("jsdh.sfdg.sdfg")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"leading dot",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: .jsdh.sfdg.sdfg\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"two dots",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: jsdh..sfdg.sdfg\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"broken port-number",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: jsdh.sfdg.sdfg:asd\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"negative port-number",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: jsdh.sfdg.sdfg:-1\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"port given but host missing",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: :80\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"port and host are broken",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: .jsdh.sfdg.:sdfg.\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"allowed characters in host-name",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: a.b-c.d123\r\n"
|
||||
|
@ -159,66 +159,66 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(buffer_is_equal_string(con->request.http_host,
|
||||
CONST_STR_LEN("a.b-c.d123")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"leading dash",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: -a.c\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"dot only",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: .\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"broken IPv4 address - non-digit",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: a192.168.2.10:1234\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"broken IPv4 address - too short",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: 192.168.2:1234\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"IPv6 address + SQL injection",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: [::1]' UNION SELECT '/\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"IPv6 address + path traversal",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: [::1]/../../../\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"negative Content-Length",
|
||||
CONST_STR_LEN("POST /12345.txt HTTP/1.0\r\n"
|
||||
"Content-Length: -2\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 411,
|
||||
run_http_request_parse(con, __LINE__, 411,
|
||||
"Content-Length is empty",
|
||||
CONST_STR_LEN("POST /12345.txt HTTP/1.0\r\n"
|
||||
"Host: 123.example.org\r\n"
|
||||
"Content-Length:\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"Host missing",
|
||||
CONST_STR_LEN("GET / HTTP/1.1\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"empty request-URI",
|
||||
CONST_STR_LEN("GET HTTP/1.0\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"#1232 - duplicate headers with line-wrapping",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Location: foo\r\n"
|
||||
|
@ -231,7 +231,7 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
&& buffer_is_equal_string(ds->value,
|
||||
CONST_STR_LEN("foo, foobar baz")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"#1232 - duplicate headers with line-wrapping - test 2",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Location: \r\n"
|
||||
|
@ -243,7 +243,7 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(ds
|
||||
&& buffer_is_equal_string(ds->value, CONST_STR_LEN("foobar baz")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"#1232 - duplicate headers with line-wrapping - test 3",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"A: \r\n"
|
||||
|
@ -255,53 +255,53 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(ds
|
||||
&& buffer_is_equal_string(ds->value, CONST_STR_LEN("foobar baz")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"missing protocol",
|
||||
CONST_STR_LEN("GET /\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 505,
|
||||
run_http_request_parse(con, __LINE__, 505,
|
||||
"zeros in protocol version",
|
||||
CONST_STR_LEN("GET / HTTP/01.01\r\n"
|
||||
"Host: foo\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 505,
|
||||
run_http_request_parse(con, __LINE__, 505,
|
||||
"missing major version",
|
||||
CONST_STR_LEN("GET / HTTP/.01\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 505,
|
||||
run_http_request_parse(con, __LINE__, 505,
|
||||
"missing minor version",
|
||||
CONST_STR_LEN("GET / HTTP/01.\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 505,
|
||||
run_http_request_parse(con, __LINE__, 505,
|
||||
"strings as version",
|
||||
CONST_STR_LEN("GET / HTTP/a.b\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"missing protocol + unknown method",
|
||||
CONST_STR_LEN("BC /\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"missing protocol + unknown method + missing URI",
|
||||
CONST_STR_LEN("ABC\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 501,
|
||||
run_http_request_parse(con, __LINE__, 501,
|
||||
"unknown method",
|
||||
CONST_STR_LEN("ABC / HTTP/1.0\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 505,
|
||||
run_http_request_parse(con, __LINE__, 505,
|
||||
"unknown protocol",
|
||||
CONST_STR_LEN("GET / HTTP/1.3\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"absolute URI",
|
||||
CONST_STR_LEN("GET http://www.example.org/ HTTP/1.0\r\n"
|
||||
"\r\n"));
|
||||
|
@ -310,19 +310,19 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
assert(buffer_is_equal_string(con->request.uri,
|
||||
CONST_STR_LEN("/")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"whitespace after key",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"ABC : foo\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"whitespace within key",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"ABC a: foo\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"no whitespace",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"ABC:foo\r\n"
|
||||
|
@ -331,7 +331,7 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
array_get_element_klen(con->request.headers, CONST_STR_LEN("ABC"));
|
||||
assert(ds && buffer_is_equal_string(ds->value, CONST_STR_LEN("foo")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"line-folding",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"ABC:foo\r\n"
|
||||
|
@ -341,26 +341,26 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
array_get_element_klen(con->request.headers, CONST_STR_LEN("ABC"));
|
||||
assert(ds && buffer_is_equal_string(ds->value, CONST_STR_LEN("foo bc")));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 411,
|
||||
run_http_request_parse(con, __LINE__, 411,
|
||||
"POST request, no Content-Length",
|
||||
CONST_STR_LEN("POST / HTTP/1.0\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"Duplicate Host headers, Bug #25",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: www.example.org\r\n"
|
||||
"Host: 123.example.org\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"Duplicate Content-Length headers",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Content-Length: 5\r\n"
|
||||
"Content-Length: 4\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"Duplicate Content-Type headers",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Content-Type: 5\r\n"
|
||||
|
@ -369,67 +369,67 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
|
||||
/* (not actually testing Range here anymore; parsing deferred until use) */
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"Duplicate Range headers (get appended)",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Range: bytes=5-6\r\n"
|
||||
"Range: bytes=5-9\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"Duplicate Range headers with invalid range (a)",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Range: bytes=0\r\n"
|
||||
"Range: bytes=5-9\r\n"
|
||||
"\r\n"));
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"Duplicate Range headers with invalid range (b)",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Range: bytes=5-9\r\n"
|
||||
"Range: bytes=0\r\n"
|
||||
"\r\n"));
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"Duplicate Range headers with invalid range (c)",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Range: 0\r\n"
|
||||
"Range: bytes=5-9\r\n"
|
||||
"\r\n"));
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"Duplicate Range headers with invalid range (d)",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Range: bytes=5-9\r\n"
|
||||
"Range: 0\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"Duplicate If-None-Match headers",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"If-None-Match: 5\r\n"
|
||||
"If-None-Match: 4\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"Duplicate If-Modified-Since headers",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"If-Modified-Since: 5\r\n"
|
||||
"If-Modified-Since: 4\r\n"
|
||||
"\r\n"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"GET with Content-Length",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Content-Length: 4\r\n"
|
||||
"\r\n"
|
||||
"1234"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"HEAD with Content-Length",
|
||||
CONST_STR_LEN("HEAD / HTTP/1.0\r\n"
|
||||
"Content-Length: 4\r\n"
|
||||
"\r\n"
|
||||
"1234"));
|
||||
|
||||
run_http_request_parse(srv, con, __LINE__, 400,
|
||||
run_http_request_parse(con, __LINE__, 400,
|
||||
"invalid chars in Header values (bug #1286)",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"If-Modified-Since: \0\r\n"
|
||||
|
@ -438,7 +438,7 @@ static void test_request_http_request_parse(server *srv, connection *con)
|
|||
/* (quick check that none of above tests were left in a state
|
||||
* which resulted in subsequent tests returning 400 for other
|
||||
* reasons) */
|
||||
run_http_request_parse(srv, con, __LINE__, 0,
|
||||
run_http_request_parse(con, __LINE__, 0,
|
||||
"valid",
|
||||
CONST_STR_LEN("GET / HTTP/1.0\r\n"
|
||||
"Host: www.example.org\r\n"
|
||||
|
@ -455,6 +455,8 @@ int main (void)
|
|||
srv.errh->errorlog_fd = -1; /* (disable) */
|
||||
|
||||
memset(&con, 0, sizeof(connection));
|
||||
con.errh = srv.errh;
|
||||
con.srv = &srv;
|
||||
con.proto = buffer_init();
|
||||
con.request.request = buffer_init();
|
||||
con.request.orig_uri = buffer_init();
|
||||
|
@ -465,7 +467,7 @@ int main (void)
|
|||
| HTTP_PARSEOPT_HOST_STRICT
|
||||
| HTTP_PARSEOPT_HOST_NORMALIZE;
|
||||
|
||||
test_request_http_request_parse(&srv, &con);
|
||||
test_request_http_request_parse(&con);
|
||||
|
||||
buffer_free(con.proto);
|
||||
buffer_free(con.request.request);
|
||||
|
|
Loading…
Reference in New Issue