From ec714d52bd4914d52a113234c16e1855d9ac7dcf Mon Sep 17 00:00:00 2001 From: Sergey Kandaurov Date: Fri, 30 Jan 2026 17:06:38 +0400 Subject: [PATCH] SCGI: fixed passing CONTENT_LENGTH in unbuffered mode. 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. --- src/http/modules/ngx_http_scgi_module.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/http/modules/ngx_http_scgi_module.c b/src/http/modules/ngx_http_scgi_module.c index 91f5f7ccd..8937464b6 100644 --- a/src/http/modules/ngx_http_scgi_module.c +++ b/src/http/modules/ngx_http_scgi_module.c @@ -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;