Skip to content

Commit

Permalink
Perl: avoid returning 500 if header was already sent.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
mdounin committed Jul 12, 2019
1 parent 12d6b3b commit 78b39bd
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/http/modules/perl/nginx.xs
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ send_http_header(r, ...)
}
}

ctx->header_sent = 1;

r->disable_not_modified = 1;

rc = ngx_http_send_header(r);
Expand Down
4 changes: 4 additions & 0 deletions src/http/modules/perl/ngx_http_perl_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -780,6 +780,10 @@ ngx_http_perl_call_handler(pTHX_ ngx_http_request_t *r,

ctx->redirect_uri.len = 0;

if (ctx->header_sent) {
return NGX_ERROR;
}

return NGX_HTTP_INTERNAL_SERVER_ERROR;
}

Expand Down
1 change: 1 addition & 0 deletions src/http/modules/perl/ngx_http_perl_module.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ typedef struct {
unsigned done:1;
unsigned error:1;
unsigned variable:1;
unsigned header_sent:1;

ngx_array_t *variables; /* array of ngx_http_perl_var_t */

Expand Down

0 comments on commit 78b39bd

Please sign in to comment.