Added r->state reset on fastcgi/scgi/uwsgi request start.
Failing to do so results in problems if 400 or 414 requests are
redirected to fastcgi/scgi/uwsgi upstream, as well as after invalid
headers got from upstream. This was already fixed for proxy in r3478,
but fastcgi (the only affected protocol at that time) was missed.
Reported by Matthieu Tourne.
diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c
index 3bc994a..65f0747 100644
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -619,6 +619,7 @@
u->process_header = ngx_http_fastcgi_process_header;
u->abort_request = ngx_http_fastcgi_abort_request;
u->finalize_request = ngx_http_fastcgi_finalize_request;
+ r->state = 0;
u->buffering = 1;
@@ -1194,6 +1195,8 @@
f->fastcgi_stdout = 0;
f->large_stderr = 0;
+ r->state = 0;
+
return NGX_OK;
}
diff --git a/src/http/modules/ngx_http_scgi_module.c b/src/http/modules/ngx_http_scgi_module.c
index 239da6b..bf0cb8a 100644
--- a/src/http/modules/ngx_http_scgi_module.c
+++ b/src/http/modules/ngx_http_scgi_module.c
@@ -434,6 +434,7 @@
u->process_header = ngx_http_scgi_process_status_line;
u->abort_request = ngx_http_scgi_abort_request;
u->finalize_request = ngx_http_scgi_finalize_request;
+ r->state = 0;
u->buffering = scf->upstream.buffering;
@@ -843,6 +844,7 @@
status->end = NULL;
r->upstream->process_header = ngx_http_scgi_process_status_line;
+ r->state = 0;
return NGX_OK;
}
diff --git a/src/http/modules/ngx_http_uwsgi_module.c b/src/http/modules/ngx_http_uwsgi_module.c
index 0c999ca..ef8994c 100644
--- a/src/http/modules/ngx_http_uwsgi_module.c
+++ b/src/http/modules/ngx_http_uwsgi_module.c
@@ -467,6 +467,7 @@
u->process_header = ngx_http_uwsgi_process_status_line;
u->abort_request = ngx_http_uwsgi_abort_request;
u->finalize_request = ngx_http_uwsgi_finalize_request;
+ r->state = 0;
u->buffering = uwcf->upstream.buffering;
@@ -883,6 +884,7 @@
status->end = NULL;
r->upstream->process_header = ngx_http_uwsgi_process_status_line;
+ r->state = 0;
return NGX_OK;
}