Skip to content

Commit

Permalink
Fixed "zero size buf in output" alerts.
Browse files Browse the repository at this point in the history
If a request had an empty request body (with Content-Length: 0), and there
were preread data available (e.g., due to a pipelined request in the buffer),
the "zero size buf in output" alert might be logged while proxying the
request to an upstream.

Similar alerts appeared with client_body_in_file_only if a request had an
empty request body.
  • Loading branch information
mdounin committed Jan 3, 2014
1 parent eb60e1e commit 8f702a5
Showing 1 changed file with 37 additions and 21 deletions.
58 changes: 37 additions & 21 deletions src/http/ngx_http_request_body.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,21 +150,27 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
goto done;
}

cl = ngx_chain_get_free_buf(r->pool, &rb->free);
if (cl == NULL) {
rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
goto done;
}
if (rb->temp_file->file.offset != 0) {

b = cl->buf;
cl = ngx_chain_get_free_buf(r->pool, &rb->free);
if (cl == NULL) {
rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
goto done;
}

ngx_memzero(b, sizeof(ngx_buf_t));
b = cl->buf;

b->in_file = 1;
b->file_last = rb->temp_file->file.offset;
b->file = &rb->temp_file->file;
ngx_memzero(b, sizeof(ngx_buf_t));

rb->bufs = cl;
b->in_file = 1;
b->file_last = rb->temp_file->file.offset;
b->file = &rb->temp_file->file;

rb->bufs = cl;

} else {
rb->bufs = NULL;
}
}

post_handler(r);
Expand Down Expand Up @@ -375,20 +381,26 @@ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}

cl = ngx_chain_get_free_buf(r->pool, &rb->free);
if (cl == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
if (rb->temp_file->file.offset != 0) {

b = cl->buf;
cl = ngx_chain_get_free_buf(r->pool, &rb->free);
if (cl == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}

ngx_memzero(b, sizeof(ngx_buf_t));
b = cl->buf;

ngx_memzero(b, sizeof(ngx_buf_t));

b->in_file = 1;
b->file_last = rb->temp_file->file.offset;
b->file = &rb->temp_file->file;

b->in_file = 1;
b->file_last = rb->temp_file->file.offset;
b->file = &rb->temp_file->file;
rb->bufs = cl;

rb->bufs = cl;
} else {
rb->bufs = NULL;
}
}

r->read_event_handler = ngx_http_block_reading;
Expand Down Expand Up @@ -843,6 +855,10 @@ ngx_http_request_body_length_filter(ngx_http_request_t *r, ngx_chain_t *in)

for (cl = in; cl; cl = cl->next) {

if (rb->rest == 0) {
break;
}

tl = ngx_chain_get_free_buf(r->pool, &rb->free);
if (tl == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
Expand Down

0 comments on commit 8f702a5

Please sign in to comment.