SCGI: fixed passing CONTENT_LENGTH in unbuffered mode.
Some checks failed
buildbot / buildbot (push) Has been cancelled

Passing requests to SCGI uses a recalculated size of a request body
as per changes made in d60b8d10f (1.3.9) to support CONTENT_LENGTH
with chunked body requests.  This, however, is not compatible with
unbuffered mode introduced later in 7ec559df5 (1.7.11), where such
an approach may not always represent complete request body.

The fix is to use r->headers_in.content_length_n representing either
original Content-Length, if any, or a recalculated value from request
body filters, such as chunked body filter.

Reported by Mufeed VH.
This commit is contained in:
Sergey Kandaurov 2026-01-30 17:06:38 +04:00 committed by Sergey Kandaurov
parent bf0508fabf
commit ec714d52bd

View file

@ -658,11 +658,9 @@ ngx_http_scgi_create_request(ngx_http_request_t *r)
u_char buffer[NGX_OFF_T_LEN];
content_length_n = 0;
body = r->upstream->request_bufs;
while (body) {
content_length_n += ngx_buf_size(body->buf);
body = body->next;
if (r->headers_in.content_length_n > 0) {
content_length_n = r->headers_in.content_length_n;
}
content_length.data = buffer;