# HG changeset patch # User Maxim Dounin # Date 1336741764 0 # Node ID adcd60233817d7ac7c39d1bea1fe0b7e0149d472 # Parent 347a54b2cb14357d63c92c08f3a2622108705db0 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 --- a/src/http/modules/ngx_http_fastcgi_module.c +++ b/src/http/modules/ngx_http_fastcgi_module.c @@ -619,6 +619,7 @@ ngx_http_fastcgi_handler(ngx_http_reques 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 @@ ngx_http_fastcgi_reinit_request(ngx_http 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 --- a/src/http/modules/ngx_http_scgi_module.c +++ b/src/http/modules/ngx_http_scgi_module.c @@ -434,6 +434,7 @@ ngx_http_scgi_handler(ngx_http_request_t 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 @@ ngx_http_scgi_reinit_request(ngx_http_re 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 --- a/src/http/modules/ngx_http_uwsgi_module.c +++ b/src/http/modules/ngx_http_uwsgi_module.c @@ -467,6 +467,7 @@ ngx_http_uwsgi_handler(ngx_http_request_ 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 @@ ngx_http_uwsgi_reinit_request(ngx_http_r status->end = NULL; r->upstream->process_header = ngx_http_uwsgi_process_status_line; + r->state = 0; return NGX_OK; }