summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_http_request.c
diff options
context:
space:
mode:
authorAndrei Belov <defan@nginx.com>2020-03-12 18:40:48 +0300
committerAndrei Belov <defan@nginx.com>2020-03-12 18:40:48 +0300
commit4b7ca39903178e20ec7381205694cb01f0dec6bc (patch)
tree51afb9c7003b5927183e7ddecd766eb19e421233 /src/nxt_http_request.c
parent8414897527ed1616ea39a0cae4d1b8ee170d5cb8 (diff)
parentb3c8a7b33a29208e75dfe4f670cf81dac7b99ccc (diff)
downloadunit-4b7ca39903178e20ec7381205694cb01f0dec6bc.tar.gz
unit-4b7ca39903178e20ec7381205694cb01f0dec6bc.tar.bz2
Merged with the default branch.1.16.0-1
Diffstat (limited to 'src/nxt_http_request.c')
-rw-r--r--src/nxt_http_request.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/nxt_http_request.c b/src/nxt_http_request.c
index 14c75dab..72aaa290 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;
}
}
@@ -319,18 +326,8 @@ nxt_http_action_t *
nxt_http_application_handler(nxt_task_t *task, nxt_http_request_t *r,
nxt_http_action_t *action)
{
- nxt_event_engine_t *engine;
-
nxt_debug(task, "http application handler");
- nxt_mp_retain(r->mem_pool);
-
- engine = task->thread->engine;
- r->timer.task = &engine->task;
- r->timer.work_queue = &engine->fast_work_queue;
- r->timer.log = engine->task.log;
- r->timer.bias = NXT_TIMER_DEFAULT_BIAS;
-
/*
* TODO: need an application flag to get local address
* required by "SERVER_ADDR" in Pyhton and PHP. Not used in Go.
@@ -572,6 +569,14 @@ nxt_http_request_close_handler(nxt_task_t *task, void *obj, void *data)
r->proto.any = NULL;
+ if (r->body != NULL && nxt_buf_is_file(r->body)
+ && r->body->file->fd != -1)
+ {
+ nxt_fd_close(r->body->file->fd);
+
+ r->body->file->fd = -1;
+ }
+
if (nxt_fast_path(proto.any != NULL)) {
protocol = r->protocol;