mirror of
https://github.com/nginx/nginx.git
synced 2025-06-11 12:22:41 +08:00
Perl: additional ctx->header_sent checks.
As we now have ctx->header_sent flag, it is further used to prevent duplicate $r->send_http_header() calls, prevent output before sending header, and $r->internal_redirect() after sending header. Further, $r->send_http_header() protected from calls after $r->internal_redirect().
This commit is contained in:
parent
78b39bd631
commit
9e883a2e48
@ -141,6 +141,14 @@ send_http_header(r, ...)
|
||||
croak("send_http_header(): cannot be used in variable handler");
|
||||
}
|
||||
|
||||
if (ctx->header_sent) {
|
||||
croak("send_http_header(): header already sent");
|
||||
}
|
||||
|
||||
if (ctx->redirect_uri.len) {
|
||||
croak("send_http_header(): cannot be used with internal_redirect()");
|
||||
}
|
||||
|
||||
if (r->headers_out.status == 0) {
|
||||
r->headers_out.status = NGX_HTTP_OK;
|
||||
}
|
||||
@ -666,6 +674,10 @@ print(r, ...)
|
||||
croak("print(): cannot be used in variable handler");
|
||||
}
|
||||
|
||||
if (!ctx->header_sent) {
|
||||
croak("print(): header not sent");
|
||||
}
|
||||
|
||||
if (items == 2) {
|
||||
|
||||
/*
|
||||
@ -780,6 +792,10 @@ sendfile(r, filename, offset = -1, bytes = 0)
|
||||
croak("sendfile(): cannot be used in variable handler");
|
||||
}
|
||||
|
||||
if (!ctx->header_sent) {
|
||||
croak("sendfile(): header not sent");
|
||||
}
|
||||
|
||||
filename = SvPV_nolen(ST(1));
|
||||
|
||||
if (filename == NULL) {
|
||||
@ -886,6 +902,10 @@ flush(r)
|
||||
croak("flush(): cannot be used in variable handler");
|
||||
}
|
||||
|
||||
if (!ctx->header_sent) {
|
||||
croak("flush(): header not sent");
|
||||
}
|
||||
|
||||
b = ngx_calloc_buf(r->pool);
|
||||
if (b == NULL) {
|
||||
ctx->error = 1;
|
||||
@ -921,6 +941,10 @@ internal_redirect(r, uri)
|
||||
croak("internal_redirect(): cannot be used in variable handler");
|
||||
}
|
||||
|
||||
if (ctx->header_sent) {
|
||||
croak("internal_redirect(): header already sent");
|
||||
}
|
||||
|
||||
uri = ST(1);
|
||||
|
||||
if (ngx_http_perl_sv2str(aTHX_ r, &ctx->redirect_uri, uri) != NGX_OK) {
|
||||
|
@ -394,6 +394,7 @@ ngx_http_perl_ssi(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ssi_ctx,
|
||||
pmcf = ngx_http_get_module_main_conf(r, ngx_http_perl_module);
|
||||
|
||||
ctx->ssi = ssi_ctx;
|
||||
ctx->header_sent = 1;
|
||||
|
||||
handler = params[NGX_HTTP_PERL_SSI_SUB];
|
||||
handler->data[handler->len] = '\0';
|
||||
|
Loading…
Reference in New Issue
Block a user