mirror of
https://github.com/nginx/nginx.git
synced 2025-06-12 21:52:41 +08:00
Fixed "zero size buf in output" alerts.
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.
This commit is contained in:
parent
eb60e1e26d
commit
8f702a573a
@ -150,21 +150,27 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
cl = ngx_chain_get_free_buf(r->pool, &rb->free);
|
if (rb->temp_file->file.offset != 0) {
|
||||||
if (cl == NULL) {
|
|
||||||
rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
|
cl = ngx_chain_get_free_buf(r->pool, &rb->free);
|
||||||
goto done;
|
if (cl == NULL) {
|
||||||
|
rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
rb->bufs = cl;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
rb->bufs = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
rb->bufs = cl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
post_handler(r);
|
post_handler(r);
|
||||||
@ -375,20 +381,26 @@ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
|
|||||||
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
cl = ngx_chain_get_free_buf(r->pool, &rb->free);
|
if (rb->temp_file->file.offset != 0) {
|
||||||
if (cl == NULL) {
|
|
||||||
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
rb->bufs = cl;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
rb->bufs = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
rb->bufs = cl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
r->read_event_handler = ngx_http_block_reading;
|
r->read_event_handler = ngx_http_block_reading;
|
||||||
@ -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) {
|
for (cl = in; cl; cl = cl->next) {
|
||||||
|
|
||||||
|
if (rb->rest == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
tl = ngx_chain_get_free_buf(r->pool, &rb->free);
|
tl = ngx_chain_get_free_buf(r->pool, &rb->free);
|
||||||
if (tl == NULL) {
|
if (tl == NULL) {
|
||||||
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||||
|
Loading…
Reference in New Issue
Block a user