HTTP parser: improved error reporting.

This commit is contained in:
Valentin Bartenev
2018-01-15 20:49:59 +03:00
parent 819b43fc2d
commit 3fb140d6d2
4 changed files with 59 additions and 32 deletions

View File

@@ -190,6 +190,7 @@ nxt_h1p_header_parse(nxt_task_t *task, void *obj, void *data)
nxt_buf_t *in, *b;
nxt_conn_t *c;
nxt_h1proto_t *h1p;
nxt_http_status_t status;
nxt_http_request_t *r;
nxt_socket_conf_joint_t *joint;
@@ -264,7 +265,13 @@ nxt_h1p_header_parse(nxt_task_t *task, void *obj, void *data)
return;
}
} else if (ret == NXT_AGAIN) {
/* ret == NXT_ERROR */
nxt_http_request_error(task, r, NXT_HTTP_BAD_REQUEST);
return;
}
if (ret == NXT_AGAIN) {
in = c->read;
if (nxt_buf_mem_free_size(&in->mem) == 0) {
@@ -298,9 +305,23 @@ nxt_h1p_header_parse(nxt_task_t *task, void *obj, void *data)
return;
}
/* ret == NXT_ERROR */
switch (ret) {
nxt_http_request_error(task, r, NXT_HTTP_BAD_REQUEST);
case NXT_HTTP_PARSE_INVALID:
status = NXT_HTTP_BAD_REQUEST;
break;
case NXT_HTTP_PARSE_TOO_LARGE_FIELD:
status = NXT_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE;
break;
default:
case NXT_ERROR:
status = NXT_HTTP_INTERNAL_SERVER_ERROR;
break;
}
nxt_http_request_error(task, r, status);
return;
fail: