nginx-0.1.19-RELEASE import
*) Bugfix: now, if request contains the zero, then the 404 error is
returned for the local requests.
*) Bugfix: nginx could not be built on NetBSD 2.0.
*) Bugfix: the timeout may occur while reading of the the client
request body via SSL connections.
diff --git a/src/http/modules/ngx_http_autoindex_handler.c b/src/http/modules/ngx_http_autoindex_handler.c
index ac2438e..2e555a0 100644
--- a/src/http/modules/ngx_http_autoindex_handler.c
+++ b/src/http/modules/ngx_http_autoindex_handler.c
@@ -128,6 +128,11 @@
return NGX_DECLINED;
}
+ /* TODO: Win32 */
+ if (r->zero_in_uri) {
+ return NGX_DECLINED;
+ }
+
alcf = ngx_http_get_module_loc_conf(r, ngx_http_autoindex_module);
if (!alcf->enable) {
diff --git a/src/http/modules/ngx_http_geo_module.c b/src/http/modules/ngx_http_geo_module.c
index 7d17f03..0d8267d 100644
--- a/src/http/modules/ngx_http_geo_module.c
+++ b/src/http/modules/ngx_http_geo_module.c
@@ -10,9 +10,9 @@
typedef struct {
- ngx_radix_tree_t *tree;
- ngx_pool_t *pool;
- ngx_array_t values;
+ ngx_radix_tree_t *tree;
+ ngx_pool_t *pool;
+ ngx_array_t values;
} ngx_http_geo_conf_t;
@@ -63,21 +63,31 @@
/* AF_INET only */
-static ngx_http_variable_value_t *ngx_http_geo_variable(ngx_http_request_t *r,
- void *data)
+static ngx_http_variable_value_t *
+ngx_http_geo_variable(ngx_http_request_t *r, void *data)
{
ngx_radix_tree_t *tree = data;
- struct sockaddr_in *sin;
+ struct sockaddr_in *sin;
+ ngx_http_variable_value_t *var;
sin = (struct sockaddr_in *) r->connection->sockaddr;
- return (ngx_http_variable_value_t *)
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+ "http geo started");
+
+ var = (ngx_http_variable_value_t *)
ngx_radix32tree_find(tree, ntohl(sin->sin_addr.s_addr));
+
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+ "http geo: %V %V", &r->connection->addr_text, &var->text);
+
+ return var;
}
-static char *ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+static char *
+ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
char *rv;
ngx_str_t *value;
@@ -91,7 +101,7 @@
return NGX_CONF_ERROR;
}
- if (!(tree = ngx_radix_tree_create(cf->pool, 8))) {
+ if (!(tree = ngx_radix_tree_create(cf->pool, -1))) {
return NGX_CONF_ERROR;
}
@@ -148,7 +158,8 @@
/* AF_INET only */
-static char *ngx_http_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
+static char *
+ngx_http_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
{
ngx_int_t rc, n;
ngx_uint_t i;
diff --git a/src/http/modules/ngx_http_gzip_filter.c b/src/http/modules/ngx_http_gzip_filter.c
index ccf5dc4..c7a16a7 100644
--- a/src/http/modules/ngx_http_gzip_filter.c
+++ b/src/http/modules/ngx_http_gzip_filter.c
@@ -216,7 +216,7 @@
NULL, /* merge server configuration */
ngx_http_gzip_create_conf, /* create location configuration */
- ngx_http_gzip_merge_conf, /* merge location configuration */
+ ngx_http_gzip_merge_conf /* merge location configuration */
};
diff --git a/src/http/modules/ngx_http_index_handler.c b/src/http/modules/ngx_http_index_handler.c
index 892b825..1c7d0df 100644
--- a/src/http/modules/ngx_http_index_handler.c
+++ b/src/http/modules/ngx_http_index_handler.c
@@ -120,6 +120,11 @@
return NGX_DECLINED;
}
+ /* TODO: Win32 */
+ if (r->zero_in_uri) {
+ return NGX_DECLINED;
+ }
+
log = r->connection->log;
/*
diff --git a/src/http/modules/ngx_http_ssi_filter.c b/src/http/modules/ngx_http_ssi_filter.c
index 334dd53..eeb515f 100644
--- a/src/http/modules/ngx_http_ssi_filter.c
+++ b/src/http/modules/ngx_http_ssi_filter.c
@@ -518,48 +518,49 @@
#endif
-static ngx_int_t ngx_http_ssi_parse(ngx_http_request_t *r,
- ngx_http_ssi_ctx_t *ctx)
+static ngx_int_t
+ngx_http_ssi_parse(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
{
- char *p, *last, *end, ch;
+ u_char *p, *last, *end, ch;
ngx_http_ssi_conf_t *conf;
ngx_http_ssi_state_e state;
conf = ngx_http_get_module_loc_conf(r, ngx_http_ssi_filter_module);
state = ctx->state;
- p = ctx->pos;
end = ctx->buf->last;
last = NULL;
- while (p < end) {
- ch = *p++;
+ for (p = ctx->pos; p < end; p++) {
+
+ ch = *p;
+
+ if (state == ssi_start_state) {
+
+ /* the tight loop */
+
+ for ( /* void */ ; p < end; p++) {
+ if (ch != '<') {
+ continue;
+ }
+
+ last = p;
+ state = ssi_tag_state;
+ break;
+ }
+
+ if (p == end) {
+ ctx->last = p;
+ ctx->pos = p;
+ ctx->state = ssi_start_state;
+
+ return NGX_HTTP_SSI_COPY;
+ }
+ }
switch (state) {
case ssi_start_state:
-
- /* a tight loop */
-
- for ( ;; ) {
-
- if (ch == '<') {
- last = p - 1;
- state = ssi_tag_state;
- break;
- }
-
- if (p == end) {
- ctx->last = p;
- ctx->pos = p;
- ctx->state = ssi_start_state;
-
- return NGX_HTTP_SSI_COPY;
- }
-
- ch = *p++;
- }
-
break;
case ssi_tag_state:
@@ -569,7 +570,7 @@
break;
case '<':
- last = p - 1;
+ last = p;
break;
default:
@@ -586,7 +587,7 @@
break;
case '<':
- last = p - 1;
+ last = p;
state = ssi_tag_state;
break;
@@ -604,7 +605,7 @@
break;
case '<':
- last = p - 1;
+ last = p;
state = ssi_tag_state;
break;
@@ -621,11 +622,10 @@
ctx->last = last;
ctx->pos = p;
ctx->state = ssi_precommand_state;
-
- return NGX_HTTP_SSI_COPY;
+ break;
case '<':
- last = p - 1;
+ last = p;
state = ssi_tag_state;
break;
@@ -645,14 +645,14 @@
break;
default:
+ ctx->command.len = 1;
ctx->command.data =
- ngx_palloc(r->pool, NGX_HTTP_SSI_COMMAND_LEN + 1);
+ ngx_palloc(r->pool, NGX_HTTP_SSI_COMMAND_LEN);
if (ctx->command.data == NULL) {
return NGX_ERROR;
}
ctx->command.data[0] = ch;
- ctx->command.len = 1;
state = ssi_command_state;
break;
}
@@ -665,20 +665,15 @@
case CR:
case LF:
case '\t':
- ctx->command.data[ctx->command.len] = 0;
state = ssi_preparam_state;
break;
case '-':
- ctx->command.data[ctx->command.len] = 0;
state = ssi_comment_end0_state;
break;
default:
- if (ctx->command.len >= NGX_HTTP_SSI_COMMAND_LEN) {
- ctx->command.data[NGX_HTTP_SSI_COMMAND_LEN] = 0;
-
- ctx->last = last;
+ if (ctx->command.len == NGX_HTTP_SSI_COMMAND_LEN) {
ctx->pos = p;
ctx->state = ssi_error_state;
@@ -704,28 +699,30 @@
default:
if (ctx->params.elts == NULL) {
- ngx_init_array(ctx->params, r->pool,
- 5, sizeof(ngx_table_elt_t), NGX_ERROR);
+ if (ngx_array_init(&ctx->params = r->pool,
+ 4, sizeof(ngx_table_elt_t)) = NGX_ERROR)
+ {
+ return NGX_ERROR;
+ }
}
- if (!(ctx->param = ngx_push_array(&ctx->params))) {
+ if (!(ctx->param = ngx_array_push(&ctx->params))) {
return NGX_ERROR;
}
+ ctx->param->key.len = 1;
ctx->param->key.data =
- ngx_palloc(r->pool, NGX_HTTP_SSI_PARAM_LEN + 1);
+ ngx_palloc(r->pool, NGX_HTTP_SSI_PARAM_LEN);
if (ctx->param->key.data == NULL) {
return NGX_ERROR;
}
ctx->param->key.data[0] = ch;
- ctx->param->key.len = 1;
- ctx->param->value.data =
- ngx_palloc(r->pool, conf->value_len + 1);
+ ctx->param->value.len = 0;
+ ctx->param->value.data = ngx_palloc(r->pool, conf->value_len);
if (ctx->param->value.data == NULL) {
return NGX_ERROR;
}
- ctx->param->value.len = 0;
state = ssi_param_state;
break;
@@ -739,27 +736,21 @@
case CR:
case LF:
case '\t':
- ctx->param->key.data[ctx->param->key.len] = 0;
state = ssi_preequal_state;
break;
case '=':
- ctx->param->key.data[ctx->param->key.len] = 0;
state = ssi_prevalue_state;
break;
case '-':
- ctx->last = last;
ctx->pos = p;
ctx->state = ssi_error_end0_state;
return NGX_HTTP_SSI_INVALID_PARAM;
default:
- if (ctx->param->key.len >= NGX_HTTP_SSI_PARAM_LEN) {
- ctx->param->key.data[NGX_HTTP_SSI_PARAM_LEN] = 0;
-
- ctx->last = last;
+ if (ctx->param->key.len == NGX_HTTP_SSI_PARAM_LEN) {
ctx->pos = p;
ctx->state = ssi_error_state;
@@ -784,7 +775,6 @@
break;
case '-':
- ctx->last = last;
ctx->pos = p;
ctx->state = ssi_error_end0_state;
diff --git a/src/http/modules/ngx_http_static_handler.c b/src/http/modules/ngx_http_static_handler.c
index fa2bcd5..1ff45da 100644
--- a/src/http/modules/ngx_http_static_handler.c
+++ b/src/http/modules/ngx_http_static_handler.c
@@ -87,6 +87,11 @@
return NGX_DECLINED;
}
+ /* TODO: Win32 */
+ if (r->zero_in_uri) {
+ return NGX_DECLINED;
+ }
+
if (r->method != NGX_HTTP_GET && r->method != NGX_HTTP_HEAD) {
return NGX_HTTP_NOT_ALLOWED;
}