diff options
author | Max Romanov <max.romanov@nginx.com> | 2020-03-12 17:54:19 +0300 |
---|---|---|
committer | Max Romanov <max.romanov@nginx.com> | 2020-03-12 17:54:19 +0300 |
commit | 0b5aabfc3f6dafa00d4cd4da595bceeefd1a1d27 (patch) | |
tree | a2e15a24880b57c7991e2b0a7ee47a2fd888801f | |
parent | f3e6726098220701dc2193c440852d04508cf972 (diff) | |
download | unit-0b5aabfc3f6dafa00d4cd4da595bceeefd1a1d27.tar.gz unit-0b5aabfc3f6dafa00d4cd4da595bceeefd1a1d27.tar.bz2 |
Checking Content-Length value right after header parse.
The check was moved from the request body read stage.
-rw-r--r-- | src/nxt_h1proto.c | 5 | ||||
-rw-r--r-- | src/nxt_http_request.c | 9 |
2 files changed, 8 insertions, 6 deletions
diff --git a/src/nxt_h1proto.c b/src/nxt_h1proto.c index 1a6c537e..c326ef30 100644 --- a/src/nxt_h1proto.c +++ b/src/nxt_h1proto.c @@ -847,11 +847,6 @@ nxt_h1p_request_body_read(nxt_task_t *task, nxt_http_request_t *r) goto ready; } - if (r->content_length_n > (nxt_off_t) r->conf->socket_conf->max_body_size) { - status = NXT_HTTP_PAYLOAD_TOO_LARGE; - goto error; - } - body_length = (size_t) r->content_length_n; b = r->body; diff --git a/src/nxt_http_request.c b/src/nxt_http_request.c index 14c75dab..d610f65d 100644 --- a/src/nxt_http_request.c +++ b/src/nxt_http_request.c @@ -186,7 +186,7 @@ nxt_int_t nxt_http_request_content_length(void *ctx, nxt_http_field_t *field, uintptr_t data) { - nxt_off_t n; + nxt_off_t n, max_body_size; nxt_http_request_t *r; r = ctx; @@ -198,6 +198,13 @@ nxt_http_request_content_length(void *ctx, nxt_http_field_t *field, if (nxt_fast_path(n >= 0)) { r->content_length_n = n; + + max_body_size = r->conf->socket_conf->max_body_size; + + if (nxt_slow_path(n > max_body_size)) { + return NXT_HTTP_PAYLOAD_TOO_LARGE; + } + return NXT_OK; } } |