summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-08-18 14:15:12 +0000
committerJonathan Kolb <jon@b0g.us>2006-08-18 14:15:12 +0000
commitbfb99d562d277020b5fb9617c8b67a91c1866354 (patch)
tree6f82707b6ab9ac9695fe7179cfefadedbd2a3f4c
parentfc31d77ffaa5ab46c7b2306f0689cf25b83affb6 (diff)
downloadnginx-bfb99d562d277020b5fb9617c8b67a91c1866354.tar.gz
Changes with nginx 0.3.60 18 Aug 2006v0.3.60
*) Bugfix: a worker process may got caught in an endless loop while an error redirection; bug appeared in 0.3.59.
-rw-r--r--CHANGES6
-rw-r--r--CHANGES.ru6
-rw-r--r--src/core/nginx.h2
-rw-r--r--src/http/ngx_http_core_module.c16
-rw-r--r--src/http/ngx_http_request.c6
-rw-r--r--src/http/ngx_http_special_response.c3
6 files changed, 30 insertions, 9 deletions
diff --git a/CHANGES b/CHANGES
index 644053ee8..f978aa890 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,10 @@
+Changes with nginx 0.3.60 18 Aug 2006
+
+ *) Bugfix: a worker process may got caught in an endless loop while an
+ error redirection; bug appeared in 0.3.59.
+
+
Changes with nginx 0.3.59 16 Aug 2006
*) Feature: now is possible to do several redirection using the
diff --git a/CHANGES.ru b/CHANGES.ru
index 3e67640c8..994d7c510 100644
--- a/CHANGES.ru
+++ b/CHANGES.ru
@@ -1,4 +1,10 @@
+Изменения в nginx 0.3.60 18.08.2006
+
+ *) Исправление: во время перенаправления ошибки рабочий процесс мог
+ зациклиться; ошибка появилась в 0.3.59.
+
+
Изменения в nginx 0.3.59 16.08.2006
*) Добавление: теперь можно делать несколько перенаправлений через
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 224fb70f8..1d417fed8 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
#define _NGINX_H_INCLUDED_
-#define NGINX_VER "nginx/0.3.59"
+#define NGINX_VER "nginx/0.3.60"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index b28931757..5c19167a9 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -507,7 +507,7 @@ ngx_http_handler(ngx_http_request_t *r)
r->valid_location = 1;
r->uri_changed = 1;
- r->phase = (r == r->main) ? NGX_HTTP_POST_READ_PHASE:
+ r->phase = (!r->internal) ? NGX_HTTP_POST_READ_PHASE:
NGX_HTTP_SERVER_REWRITE_PHASE;
r->phase_handler = 0;
@@ -1324,6 +1324,15 @@ ngx_http_internal_redirect(ngx_http_request_t *r,
{
ngx_http_core_srv_conf_t *cscf;
+ r->uri_changes--;
+
+ if (r->uri_changes == 0) {
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "rewrite or internal redirection cycle");
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ return NGX_DONE;
+ }
+
r->uri = *uri;
if (args) {
@@ -1338,7 +1347,8 @@ ngx_http_internal_redirect(ngx_http_request_t *r,
"internal redirect: \"%V?%V\"", uri, &r->args);
if (ngx_http_set_exten(r) != NGX_OK) {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ return NGX_DONE;
}
/* clear the modules contexts */
@@ -1351,8 +1361,6 @@ ngx_http_internal_redirect(ngx_http_request_t *r,
r->internal = 1;
- r->uri_changes--;
-
ngx_http_handler(r);
return NGX_DONE;
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 417f3dfa7..eb8b557b4 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -424,6 +424,9 @@ ngx_http_init_request(ngx_event_t *rev)
r->headers_out.content_length_n = -1;
r->headers_out.last_modified_time = -1;
+ r->uri_changes = NGX_HTTP_MAX_URI_CHANGES + 1;
+ r->subrequests = NGX_HTTP_MAX_SUBREQUESTS + 1;
+
r->http_state = NGX_HTTP_READING_REQUEST_STATE;
ctx = c->log->data;
@@ -667,9 +670,6 @@ ngx_http_process_request_line(ngx_event_t *rev)
c->write->handler = ngx_http_request_handler;
r->read_event_handler = ngx_http_block_read;
- r->uri_changes = NGX_HTTP_MAX_URI_CHANGES + 1;
- r->subrequests = NGX_HTTP_MAX_SUBREQUESTS + 1;
-
ngx_http_handler(r);
return;
diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c
index abdf62482..a44c51c6a 100644
--- a/src/http/ngx_http_special_response.c
+++ b/src/http/ngx_http_special_response.c
@@ -312,6 +312,7 @@ ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error)
}
r->headers_out.status = error;
+ r->err_status = error;
if (r->keepalive != 0) {
switch (error) {
@@ -340,7 +341,7 @@ ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error)
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
- if (clcf->error_pages) {
+ if (r->uri_changes && clcf->error_pages) {
err_page = clcf->error_pages->elts;