Changeset 7143:e532d397ca5e in nginx


Ignore:
Timestamp:
10/04/17 18:15:15 (2 years ago)
Author:
Valentin Bartenev <vbart@…>
Branch:
stable-1.12
Phase:
public
Graft:
7118:b6dc472299da
Message:

HTTP/2: enforce writing the sync request body buffer to file.

The sync flag of HTTP/2 request body buffer is used when the size of request
body is unknown or bigger than configured "client_body_buffer_size". In this
case the buffer points to body data inside the global receive buffer that is
used for reading all HTTP/2 connections in the worker process. Thus, when the
sync flag is set, the buffer must be flushed to a temporary file, otherwise
the request body data can be overwritten.

Previously, the sync buffer wasn't flushed to a temporary file if the whole
body was received in one DATA frame with the END_STREAM flag and wasn't
copied into the HTTP/2 body preread buffer. As a result, the request body
might be corrupted (ticket #1384).

Now, setting r->request_body_in_file_only enforces writing the sync buffer
to a temporary file in all cases.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/http/v2/ngx_http_v2.c

    r6958 r7143  
    35583558
    35593559    } else {
    3560         if (stream->preread) {
    3561             /* enforce writing preread buffer to file */
    3562             r->request_body_in_file_only = 1;
    3563         }
    3564 
    35653560        rb->buf = ngx_calloc_buf(r->pool);
    35663561
     
    36603655            buf->pos = buf->start = pos;
    36613656            buf->last = buf->end = pos + size;
     3657
     3658            r->request_body_in_file_only = 1;
    36623659
    36633660        } else {
Note: See TracChangeset for help on using the changeset viewer.