Welcome! Log In Create A New Profile

Advanced

[nginx] FastCGI: fixed zero size buf alerts on extra data (ticket #2018).

Maxim Dounin
July 27, 2020 02:18PM
details: https://hg.nginx.org/nginx/rev/da8d758aabeb
branches:
changeset: 7689:da8d758aabeb
user: Maxim Dounin <mdounin@mdounin.ru>
date: Mon Jul 27 16:02:15 2020 +0300
description:
FastCGI: fixed zero size buf alerts on extra data (ticket #2018).

After 05e42236e95b (1.19.1) responses with extra data might result in
zero size buffers being generated and "zero size buf" alerts in writer
(if f->rest happened to be 0 when processing additional stdout data).

diffstat:

src/http/modules/ngx_http_fastcgi_module.c | 28 ++++++++++++++++++++++------
1 files changed, 22 insertions(+), 6 deletions(-)

diffs (59 lines):

diff -r 2f9214713666 -r da8d758aabeb src/http/modules/ngx_http_fastcgi_module.c
--- a/src/http/modules/ngx_http_fastcgi_module.c Mon Jul 27 13:21:51 2020 +0300
+++ b/src/http/modules/ngx_http_fastcgi_module.c Mon Jul 27 16:02:15 2020 +0300
@@ -2306,6 +2306,18 @@ ngx_http_fastcgi_input_filter(ngx_event_
break;
}

+ if (f->rest == -2) {
+ f->rest = r->upstream->headers_in.content_length_n;
+ }
+
+ if (f->rest == 0) {
+ ngx_log_error(NGX_LOG_WARN, p->log, 0,
+ "upstream sent more data than specified in "
+ "\"Content-Length\" header");
+ p->upstream_done = 1;
+ break;
+ }
+
cl = ngx_chain_get_free_buf(p->pool, &p->free);
if (cl == NULL) {
return NGX_ERROR;
@@ -2349,11 +2361,7 @@ ngx_http_fastcgi_input_filter(ngx_event_
b->last = f->last;
}

- if (f->rest == -2) {
- f->rest = r->upstream->headers_in.content_length_n;
- }
-
- if (f->rest >= 0) {
+ if (f->rest > 0) {

if (b->last - b->pos > f->rest) {
ngx_log_error(NGX_LOG_WARN, p->log, 0,
@@ -2564,6 +2572,14 @@ ngx_http_fastcgi_non_buffered_filter(voi
break;
}

+ if (f->rest == 0) {
+ ngx_log_error(NGX_LOG_WARN, r->connection->log, 0,
+ "upstream sent more data than specified in "
+ "\"Content-Length\" header");
+ u->length = 0;
+ break;
+ }
+
cl = ngx_chain_get_free_buf(r->pool, &u->free_bufs);
if (cl == NULL) {
return NGX_ERROR;
@@ -2594,7 +2610,7 @@ ngx_http_fastcgi_non_buffered_filter(voi
b->last = f->last;
}

- if (f->rest >= 0) {
+ if (f->rest > 0) {

if (b->last - b->pos > f->rest) {
ngx_log_error(NGX_LOG_WARN, r->connection->log, 0,
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] FastCGI: fixed zero size buf alerts on extra data (ticket #2018).

Maxim Dounin 565 July 27, 2020 02:18PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 269
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready