Controller: fixed reading of request body.
This commit is contained in:
@@ -301,7 +301,7 @@ nxt_controller_conn_read(nxt_task_t *task, void *obj, void *data)
|
|||||||
preread = nxt_buf_mem_used_size(&b->mem);
|
preread = nxt_buf_mem_used_size(&b->mem);
|
||||||
|
|
||||||
nxt_debug(task, "controller request header parsing complete, "
|
nxt_debug(task, "controller request header parsing complete, "
|
||||||
"body length: %O, preread: %uz",
|
"body length: %uz, preread: %uz",
|
||||||
r->length, preread);
|
r->length, preread);
|
||||||
|
|
||||||
if (preread >= r->length) {
|
if (preread >= r->length) {
|
||||||
@@ -382,27 +382,25 @@ static const nxt_event_conn_state_t nxt_controller_conn_body_read_state
|
|||||||
static void
|
static void
|
||||||
nxt_controller_conn_body_read(nxt_task_t *task, void *obj, void *data)
|
nxt_controller_conn_body_read(nxt_task_t *task, void *obj, void *data)
|
||||||
{
|
{
|
||||||
size_t rest;
|
size_t read;
|
||||||
nxt_buf_t *b;
|
nxt_buf_t *b;
|
||||||
nxt_conn_t *c;
|
nxt_conn_t *c;
|
||||||
|
nxt_controller_request_t *r;
|
||||||
|
|
||||||
c = obj;
|
c = obj;
|
||||||
|
r = data;
|
||||||
nxt_debug(task, "controller conn body read");
|
|
||||||
|
|
||||||
b = c->read;
|
b = c->read;
|
||||||
|
|
||||||
rest = nxt_buf_mem_free_size(&b->mem);
|
read = nxt_buf_mem_used_size(&b->mem);
|
||||||
|
|
||||||
if (rest == 0) {
|
nxt_debug(task, "controller conn body read: %uz of %uz",
|
||||||
nxt_debug(task, "controller conn body read complete");
|
read, r->length);
|
||||||
|
|
||||||
|
if (read >= r->length) {
|
||||||
nxt_controller_process_request(task, c, data);
|
nxt_controller_process_request(task, c, data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
nxt_debug(task, "controller conn body read again, rest: %uz", rest);
|
|
||||||
|
|
||||||
nxt_conn_read(task->thread->engine, c);
|
nxt_conn_read(task->thread->engine, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -525,7 +523,11 @@ nxt_controller_request_content_length(void *ctx, nxt_http_field_t *field,
|
|||||||
length = nxt_off_t_parse(field->value.start, field->value.length);
|
length = nxt_off_t_parse(field->value.start, field->value.length);
|
||||||
|
|
||||||
if (nxt_fast_path(length > 0)) {
|
if (nxt_fast_path(length > 0)) {
|
||||||
|
|
||||||
|
if (nxt_slow_path(length > NXT_SIZE_T_MAX)) {
|
||||||
nxt_log_error(NXT_LOG_ERR, log, "Content-Length is too big");
|
nxt_log_error(NXT_LOG_ERR, log, "Content-Length is too big");
|
||||||
|
return NXT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
r->length = length;
|
r->length = length;
|
||||||
return NXT_OK;
|
return NXT_OK;
|
||||||
|
|||||||
Reference in New Issue
Block a user