summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2005-08-23 15:35:08 +0000
committerJonathan Kolb <jon@b0g.us>2005-08-23 15:35:08 +0000
commitf1b3720e060cc204d9a77f79a392fbb505b4144d (patch)
treef5bd152afc798c1690779d2638be1fca7a524390
parent82659b9f9116f09bfede78be1f0ad5be19023e25 (diff)
downloadnginx-f1b3720e060cc204d9a77f79a392fbb505b4144d.tar.gz
Changes with nginx 0.1.42 23 Aug 2005v0.1.42
*) Bugfix: if the request URI had a zero length after the processing in the ngx_http_proxy_module, then the segmentation fault or bus error occurred in the ngx_http_proxy_module. *) Bugfix: the "limit_rate" directive did not work inside the "if" block; bug appeared in 0.1.38.
-rw-r--r--CHANGES10
-rw-r--r--CHANGES.ru10
-rw-r--r--src/core/nginx.h2
-rw-r--r--src/event/ngx_event_timer.c2
-rw-r--r--src/http/ngx_http.h1
-rw-r--r--src/http/ngx_http_core_module.c58
-rw-r--r--src/http/ngx_http_request.c3
-rw-r--r--src/http/ngx_http_request.h6
-rw-r--r--src/http/ngx_http_script.c9
-rw-r--r--src/http/ngx_http_special_response.c2
-rw-r--r--src/os/unix/ngx_process_cycle.c2
11 files changed, 72 insertions, 33 deletions
diff --git a/CHANGES b/CHANGES
index c854bc95e..0c683b71f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,14 @@
+Changes with nginx 0.1.42 23 Aug 2005
+
+ *) Bugfix: if the request URI had a zero length after the processing in
+ the ngx_http_proxy_module, then the segmentation fault or bus error
+ occurred in the ngx_http_proxy_module.
+
+ *) Bugfix: the "limit_rate" directive did not work inside the "if"
+ block; bug appeared in 0.1.38.
+
+
Changes with nginx 0.1.41 25 Jul 2005
*) Bugfix: if the variable was used in the configuration file, then it
diff --git a/CHANGES.ru b/CHANGES.ru
index 16586c102..736e45604 100644
--- a/CHANGES.ru
+++ b/CHANGES.ru
@@ -1,4 +1,14 @@
+Изменения в nginx 0.1.42 23.08.2005
+
+ *) Исправление: если URI запроса получался нулевой длины после
+ обработки модулем ngx_http_rewrite_module, то в модуле
+ ngx_http_proxy_module происходил segmentation fault или bus error.
+
+ *) Исправление: директива limit_rate не работала внутри блока if;
+ ошибка появилась в 0.1.38.
+
+
Изменения в nginx 0.1.41 25.07.2005
*) Исправление: если переменная использовалась в файле конфигурации, то
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 281036f33..8f0a36513 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
#define _NGINX_H_INCLUDED_
-#define NGINX_VER "nginx/0.1.41"
+#define NGINX_VER "nginx/0.1.42"
#define NGINX_VAR "NGINX"
#define NGX_NEWPID_EXT ".newbin"
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index 53bbc5f09..4d6c647da 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -67,7 +67,7 @@ ngx_event_find_timer(void)
(node->key * NGX_TIMER_RESOLUTION - ngx_elapsed_msec);
#endif
- return timer > 0 ? timer: 0 ;
+ return timer > 0 ? timer : 0 ;
}
diff --git a/src/http/ngx_http.h b/src/http/ngx_http.h
index 2a62896c5..5be39363b 100644
--- a/src/http/ngx_http.h
+++ b/src/http/ngx_http.h
@@ -67,6 +67,7 @@ ngx_int_t ngx_http_parse_multi_header_lines(ngx_array_t *headers,
ngx_str_t *name, ngx_str_t *value);
ngx_int_t ngx_http_find_server_conf(ngx_http_request_t *r);
+void ngx_http_update_location_config(ngx_http_request_t *r);
void ngx_http_handler(ngx_http_request_t *r);
void ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc);
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index cb7c9e8d0..852a9bbc0 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -586,27 +586,7 @@ ngx_http_find_location_config(ngx_http_request_t *r)
return NGX_HTTP_NOT_FOUND;
}
- r->connection->log->file = clcf->err_log->file;
- if (!(r->connection->log->log_level & NGX_LOG_DEBUG_CONNECTION)) {
- r->connection->log->log_level = clcf->err_log->log_level;
- }
-
- if ((ngx_io.flags & NGX_IO_SENDFILE) && clcf->sendfile) {
- r->connection->sendfile = 1;
-
- } else {
- r->connection->sendfile = 0;
- }
-
- if (r->keepalive && clcf->keepalive_timeout == 0) {
- r->keepalive = 0;
- }
-
- if (!clcf->tcp_nopush) {
- /* disable TCP_NOPUSH/TCP_CORK use */
- r->connection->tcp_nopush = NGX_TCP_NOPUSH_DISABLED;
- }
-
+ ngx_http_update_location_config(r);
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http cl:%z max:%uz",
@@ -640,13 +620,43 @@ ngx_http_find_location_config(ngx_http_request_t *r)
return NGX_HTTP_MOVED_PERMANENTLY;
}
+ return NGX_OK;
+}
+
+
+void
+ngx_http_update_location_config(ngx_http_request_t *r)
+{
+ ngx_http_core_loc_conf_t *clcf;
+
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+ r->connection->log->file = clcf->err_log->file;
+ if (!(r->connection->log->log_level & NGX_LOG_DEBUG_CONNECTION)) {
+ r->connection->log->log_level = clcf->err_log->log_level;
+ }
+
+ if ((ngx_io.flags & NGX_IO_SENDFILE) && clcf->sendfile) {
+ r->connection->sendfile = 1;
+
+ } else {
+ r->connection->sendfile = 0;
+ }
+
+ if (r->keepalive && clcf->keepalive_timeout == 0) {
+ r->keepalive = 0;
+ }
+
+ if (!clcf->tcp_nopush) {
+ /* disable TCP_NOPUSH/TCP_CORK use */
+ r->connection->tcp_nopush = NGX_TCP_NOPUSH_DISABLED;
+ }
+
r->limit_rate = clcf->limit_rate;
if (clcf->handler) {
r->content_handler = clcf->handler;
}
-
- return NGX_OK;
}
@@ -1072,6 +1082,8 @@ ngx_http_internal_redirect(ngx_http_request_t *r,
cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
r->loc_conf = cscf->ctx->loc_conf;
+ ngx_http_update_location_config(r);
+
r->internal = 1;
ngx_http_handler(r);
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 6c8bf2fa4..c6a580948 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1696,9 +1696,6 @@ static ngx_int_t
ngx_http_postponed_handler(ngx_http_request_t *r)
{
ngx_int_t rc;
-#if 0
- ngx_http_request_t *mr;
-#endif
ngx_http_postponed_request_t *pr;
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h
index d1ba774ef..2e8099102 100644
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -241,9 +241,9 @@ typedef struct {
typedef struct ngx_http_postponed_request_s ngx_http_postponed_request_t;
struct ngx_http_postponed_request_s {
- ngx_http_request_t *request;
- ngx_chain_t *out;
- ngx_http_postponed_request_t *next;
+ ngx_http_request_t *request;
+ ngx_chain_t *out;
+ ngx_http_postponed_request_t *next;
};
diff --git a/src/http/ngx_http_script.c b/src/http/ngx_http_script.c
index 716a6f054..27c9ce045 100644
--- a/src/http/ngx_http_script.c
+++ b/src/http/ngx_http_script.c
@@ -687,6 +687,14 @@ ngx_http_script_regex_end_code(ngx_http_script_engine_t *e)
if (code->uri) {
r->uri = e->buf;
+ if (r->uri.len == 0) {
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "the rewritten URI has a zero length");
+ e->ip = ngx_http_script_exit;
+ e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
+ return;
+ }
+
if (ngx_http_set_exten(r) != NGX_OK) {
e->ip = ngx_http_script_exit;
e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
@@ -737,6 +745,7 @@ ngx_http_script_if_code(ngx_http_script_engine_t *e)
if (e->sp->value) {
if (code->loc_conf) {
e->request->loc_conf = code->loc_conf;
+ ngx_http_update_location_config(e->request);
}
e->ip += sizeof(ngx_http_script_if_code_t);
diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c
index 14d4c8022..ba3bfcbc6 100644
--- a/src/http/ngx_http_special_response.c
+++ b/src/http/ngx_http_special_response.c
@@ -161,7 +161,7 @@ static char error_501_page[] =
"<html>" CRLF
"<head><title>501 Method Not Implemented</title></head>" CRLF
"<body bgcolor=\"white\">" CRLF
-"<center><h1>500 Method Not Implemented</h1></center>" CRLF
+"<center><h1>501 Method Not Implemented</h1></center>" CRLF
;
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index 9d0569411..0c8fdd27c 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -916,7 +916,7 @@ ngx_worker_process_init(ngx_cycle_t *cycle, ngx_uint_t priority)
#endif
if (ngx_add_channel_event(cycle, ngx_channel, NGX_READ_EVENT,
- ngx_channel_handler) == NGX_ERROR)
+ ngx_channel_handler) == NGX_ERROR)
{
/* fatal */
exit(2);