HTTP parser: removed unused "exten_start" and "args_start" fields.

This commit is contained in:
Valentin Bartenev
2019-09-16 20:17:42 +03:00
parent 64be8717bd
commit 2fb7a1bfb9
3 changed files with 37 additions and 47 deletions

View File

@@ -163,7 +163,7 @@ static nxt_int_t
nxt_http_parse_request_line(nxt_http_request_parse_t *rp, u_char **pos, nxt_http_parse_request_line(nxt_http_request_parse_t *rp, u_char **pos,
u_char *end) u_char *end)
{ {
u_char *p, ch, *after_slash; u_char *p, ch, *after_slash, *exten, *args;
nxt_int_t rc; nxt_int_t rc;
nxt_http_ver_t ver; nxt_http_ver_t ver;
nxt_http_target_traps_e trap; nxt_http_target_traps_e trap;
@@ -255,6 +255,8 @@ nxt_http_parse_request_line(nxt_http_request_parse_t *rp, u_char **pos,
rp->target_start = p; rp->target_start = p;
after_slash = p + 1; after_slash = p + 1;
exten = NULL;
args = NULL;
for ( ;; ) { for ( ;; ) {
p++; p++;
@@ -269,8 +271,7 @@ nxt_http_parse_request_line(nxt_http_request_parse_t *rp, u_char **pos,
} }
after_slash = p + 1; after_slash = p + 1;
exten = NULL;
rp->exten_start = NULL;
continue; continue;
case NXT_HTTP_TARGET_DOT: case NXT_HTTP_TARGET_DOT:
@@ -279,11 +280,11 @@ nxt_http_parse_request_line(nxt_http_request_parse_t *rp, u_char **pos,
goto rest_of_target; goto rest_of_target;
} }
rp->exten_start = p + 1; exten = p + 1;
continue; continue;
case NXT_HTTP_TARGET_ARGS_MARK: case NXT_HTTP_TARGET_ARGS_MARK:
rp->args_start = p + 1; args = p + 1;
goto rest_of_target; goto rest_of_target;
case NXT_HTTP_TARGET_SPACE: case NXT_HTTP_TARGET_SPACE:
@@ -437,20 +438,19 @@ space_after_target:
rp->path.start = rp->target_start; rp->path.start = rp->target_start;
if (rp->args_start != NULL) { if (args != NULL) {
rp->path.length = rp->args_start - rp->target_start - 1; rp->path.length = args - rp->target_start - 1;
rp->args.start = rp->args_start; rp->args.length = rp->target_end - args;
rp->args.length = rp->target_end - rp->args_start; rp->args.start = args;
} else { } else {
rp->path.length = rp->target_end - rp->target_start; rp->path.length = rp->target_end - rp->target_start;
} }
if (rp->exten_start) { if (exten != NULL) {
rp->exten.length = rp->path.start + rp->path.length rp->exten.length = (rp->path.start + rp->path.length) - exten;
- rp->exten_start; rp->exten.start = exten;
rp->exten.start = rp->exten_start;
} }
return nxt_http_parse_field_name(rp, pos, end); return nxt_http_parse_field_name(rp, pos, end);
@@ -835,7 +835,8 @@ static const uint8_t nxt_http_normal[32] nxt_aligned(32) = {
static nxt_int_t static nxt_int_t
nxt_http_parse_complex_target(nxt_http_request_parse_t *rp) nxt_http_parse_complex_target(nxt_http_request_parse_t *rp)
{ {
u_char *p, *u, c, ch, high; u_char *p, *u, c, ch, high, *exten, *args;
enum { enum {
sw_normal = 0, sw_normal = 0,
sw_slash, sw_slash,
@@ -852,7 +853,6 @@ nxt_http_parse_complex_target(nxt_http_request_parse_t *rp)
p = rp->target_start; p = rp->target_start;
u = nxt_mp_alloc(rp->mem_pool, rp->target_end - p + 1); u = nxt_mp_alloc(rp->mem_pool, rp->target_end - p + 1);
if (nxt_slow_path(u == NULL)) { if (nxt_slow_path(u == NULL)) {
return NXT_ERROR; return NXT_ERROR;
} }
@@ -861,8 +861,8 @@ nxt_http_parse_complex_target(nxt_http_request_parse_t *rp)
rp->path.start = u; rp->path.start = u;
high = '\0'; high = '\0';
rp->exten_start = NULL; exten = NULL;
rp->args_start = NULL; args = NULL;
while (p < rp->target_end) { while (p < rp->target_end) {
@@ -881,7 +881,7 @@ nxt_http_parse_complex_target(nxt_http_request_parse_t *rp)
switch (ch) { switch (ch) {
case '/': case '/':
rp->exten_start = NULL; exten = NULL;
state = sw_slash; state = sw_slash;
*u++ = ch; *u++ = ch;
continue; continue;
@@ -890,12 +890,12 @@ nxt_http_parse_complex_target(nxt_http_request_parse_t *rp)
state = sw_quoted; state = sw_quoted;
continue; continue;
case '?': case '?':
rp->args_start = p; args = p;
goto args; goto args;
case '#': case '#':
goto done; goto done;
case '.': case '.':
rp->exten_start = u + 1; exten = u + 1;
*u++ = ch; *u++ = ch;
continue; continue;
case '+': case '+':
@@ -928,7 +928,7 @@ nxt_http_parse_complex_target(nxt_http_request_parse_t *rp)
state = sw_quoted; state = sw_quoted;
continue; continue;
case '?': case '?':
rp->args_start = p; args = p;
goto args; goto args;
case '#': case '#':
goto done; goto done;
@@ -965,7 +965,7 @@ nxt_http_parse_complex_target(nxt_http_request_parse_t *rp)
state = sw_quoted; state = sw_quoted;
continue; continue;
case '?': case '?':
rp->args_start = p; args = p;
goto args; goto args;
case '#': case '#':
goto done; goto done;
@@ -1009,7 +1009,7 @@ nxt_http_parse_complex_target(nxt_http_request_parse_t *rp)
state = sw_quoted; state = sw_quoted;
continue; continue;
case '?': case '?':
rp->args_start = p; args = p;
goto args; goto args;
case '#': case '#':
goto done; goto done;
@@ -1114,18 +1114,18 @@ args:
} }
} }
if (rp->args_start != NULL) { if (args != NULL) {
rp->args.length = p - rp->args_start; rp->args.length = p - args;
rp->args.start = rp->args_start; rp->args.start = args;
} }
done: done:
rp->path.length = u - rp->path.start; rp->path.length = u - rp->path.start;
if (rp->exten_start) { if (exten) {
rp->exten.length = u - rp->exten_start; rp->exten.length = u - exten;
rp->exten.start = rp->exten_start; rp->exten.start = exten;
} }
return NXT_OK; return NXT_OK;

View File

@@ -43,8 +43,6 @@ struct nxt_http_request_parse_s {
u_char *target_start; u_char *target_start;
u_char *target_end; u_char *target_end;
u_char *exten_start;
u_char *args_start;
nxt_str_t path; nxt_str_t path;
nxt_str_t args; nxt_str_t args;

View File

@@ -80,7 +80,7 @@ static nxt_http_parse_test_case_t nxt_http_test_cases[] = {
{ .request_line = { { .request_line = {
nxt_string("XXX-METHOD"), nxt_string("XXX-METHOD"),
nxt_string("/d.ir/fi+le.ext?key=val"), nxt_string("/d.ir/fi+le.ext?key=val"),
nxt_string("ext?key=val"), nxt_string("ext"),
nxt_string("key=val"), nxt_string("key=val"),
"HTTP/1.2", "HTTP/1.2",
0, 0, 0, 1 0, 0, 0, 1
@@ -163,7 +163,7 @@ static nxt_http_parse_test_case_t nxt_http_test_cases[] = {
nxt_string("GET"), nxt_string("GET"),
nxt_string("/?#"), nxt_string("/?#"),
nxt_null_string, nxt_null_string,
nxt_string("#"), nxt_string(""),
"HTTP/1.0", "HTTP/1.0",
1, 0, 0, 0 1, 0, 0, 0
}} }}
@@ -729,31 +729,23 @@ nxt_http_parse_test_request_line(nxt_http_request_parse_t *rp,
return NXT_ERROR; return NXT_ERROR;
} }
str.length = (rp->exten_start != NULL) ? rp->target_end - rp->exten_start if (rp->exten.start != test->exten.start
: 0; && !nxt_strstr_eq(&rp->exten, &test->exten))
str.start = rp->exten_start;
if (str.start != test->exten.start
&& !nxt_strstr_eq(&str, &test->exten))
{ {
nxt_log_alert(log, "http parse test case failed:\n" nxt_log_alert(log, "http parse test case failed:\n"
" - request:\n\"%V\"\n" " - request:\n\"%V\"\n"
" - exten: \"%V\" (expected: \"%V\")", " - exten: \"%V\" (expected: \"%V\")",
request, &str, &test->exten); request, &rp->exten, &test->exten);
return NXT_ERROR; return NXT_ERROR;
} }
str.length = (rp->args_start != NULL) ? rp->target_end - rp->args_start if (rp->args.start != test->args.start
: 0; && !nxt_strstr_eq(&rp->args, &test->args))
str.start = rp->args_start;
if (str.start != test->args.start
&& !nxt_strstr_eq(&str, &test->args))
{ {
nxt_log_alert(log, "http parse test case failed:\n" nxt_log_alert(log, "http parse test case failed:\n"
" - request:\n\"%V\"\n" " - request:\n\"%V\"\n"
" - args: \"%V\" (expected: \"%V\")", " - args: \"%V\" (expected: \"%V\")",
request, &str, &test->args); request, &rp->args, &test->args);
return NXT_ERROR; return NXT_ERROR;
} }