Mercurial > hg > nginx
changeset 7530:fd9252844ec1
Perl: avoid returning 500 if header was already sent.
Returning NGX_HTTP_INTERNAL_SERVER_ERROR if a perl code died after
sending header will lead to a "header already sent" alert. To avoid
it, we now check if header was already sent, and return NGX_ERROR
instead if it was.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 12 Jul 2019 15:39:25 +0300 |
parents | d758d04e0790 |
children | ede052c67512 |
files | src/http/modules/perl/nginx.xs src/http/modules/perl/ngx_http_perl_module.c src/http/modules/perl/ngx_http_perl_module.h |
diffstat | 3 files changed, 7 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/modules/perl/nginx.xs Fri Jul 12 15:38:27 2019 +0300 +++ b/src/http/modules/perl/nginx.xs Fri Jul 12 15:39:25 2019 +0300 @@ -164,6 +164,8 @@ } } + ctx->header_sent = 1; + r->disable_not_modified = 1; rc = ngx_http_send_header(r);
--- a/src/http/modules/perl/ngx_http_perl_module.c Fri Jul 12 15:38:27 2019 +0300 +++ b/src/http/modules/perl/ngx_http_perl_module.c Fri Jul 12 15:39:25 2019 +0300 @@ -780,6 +780,10 @@ ctx->redirect_uri.len = 0; + if (ctx->header_sent) { + return NGX_ERROR; + } + return NGX_HTTP_INTERNAL_SERVER_ERROR; }
--- a/src/http/modules/perl/ngx_http_perl_module.h Fri Jul 12 15:38:27 2019 +0300 +++ b/src/http/modules/perl/ngx_http_perl_module.h Fri Jul 12 15:39:25 2019 +0300 @@ -34,6 +34,7 @@ unsigned done:1; unsigned error:1; unsigned variable:1; + unsigned header_sent:1; ngx_array_t *variables; /* array of ngx_http_perl_var_t */