From 6eb7dcdd98dcba78d63b7e37a68fbe505e7ed725 Mon Sep 17 00:00:00 2001 From: Sergey Kandaurov Date: Fri, 14 Nov 2025 16:06:56 +0400 Subject: [PATCH] Request body: restored buffered empty body special case This restores a long-standing optimization when the entire request body is empty and r->request_body_in_file_only is set, used to avoid writing an empty file as initially introduced in 4c7f51136 (0.4.4). The previous condition never worked with chunked body filter, where rb->bufs holds at least the final chunk; in length body filter, it is used to indicate the last received buffer since 2a7092138 (1.21.2). The fix is to additionally check if it is the only empty buffer. Found with UndefinedBehaviorSanitizer (pointer-overflow) --- src/http/ngx_http_request_body.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c index 93c69220c..1d8e4081a 100644 --- a/src/http/ngx_http_request_body.c +++ b/src/http/ngx_http_request_body.c @@ -581,7 +581,9 @@ ngx_http_write_request_body(ngx_http_request_t *r) rb->temp_file = tf; - if (rb->bufs == NULL) { + if (rb->bufs == NULL + || (!ngx_buf_in_memory(rb->bufs->buf) && rb->bufs->buf->last_buf)) + { /* empty body with r->request_body_in_file_only */ if (ngx_create_temp_file(&tf->file, tf->path, tf->pool, -- 2.47.3