aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-10-20 19:07:50 +0000
committerIgor Sysoev <igor@sysoev.ru>2006-10-20 19:07:50 +0000
commit44d8bc2ff19385cf85c09bffdc21fe7a9eb19976 (patch)
treeaec7708481e10dd00beeb87a90eeaf8b24059e90 /src
parent3d0a7168a943a5c02928b832b5e27f5a2d928699 (diff)
downloadnginx-44d8bc2ff19385cf85c09bffdc21fe7a9eb19976.tar.gz
nginx-44d8bc2ff19385cf85c09bffdc21fe7a9eb19976.zip
fix segfault if $server_addr failed
Diffstat (limited to 'src')
-rw-r--r--src/http/modules/ngx_http_charset_filter_module.c8
-rw-r--r--src/http/modules/ngx_http_map_module.c5
-rw-r--r--src/http/ngx_http_variables.c2
3 files changed, 14 insertions, 1 deletions
diff --git a/src/http/modules/ngx_http_charset_filter_module.c b/src/http/modules/ngx_http_charset_filter_module.c
index b9c9ade91..cae9bbe53 100644
--- a/src/http/modules/ngx_http_charset_filter_module.c
+++ b/src/http/modules/ngx_http_charset_filter_module.c
@@ -250,6 +250,10 @@ ngx_http_charset_header_filter(ngx_http_request_t *r)
vv = ngx_http_get_indexed_variable(r,
charset - NGX_HTTP_CHARSET_VAR);
+ if (vv == NULL || vv->not_found) {
+ return NGX_ERROR;
+ }
+
charset = ngx_http_charset_get_charset(charsets, n,
(ngx_str_t *) vv);
}
@@ -293,6 +297,10 @@ ngx_http_charset_header_filter(ngx_http_request_t *r)
vv = ngx_http_get_indexed_variable(r,
source_charset - NGX_HTTP_CHARSET_VAR);
+ if (vv == NULL || vv->not_found) {
+ return NGX_ERROR;
+ }
+
source_charset = ngx_http_charset_get_charset(charsets, n,
(ngx_str_t *) vv);
}
diff --git a/src/http/modules/ngx_http_map_module.c b/src/http/modules/ngx_http_map_module.c
index 0a533c0f5..fb8e8ee60 100644
--- a/src/http/modules/ngx_http_map_module.c
+++ b/src/http/modules/ngx_http_map_module.c
@@ -115,6 +115,11 @@ ngx_http_map_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
vv = ngx_http_get_flushed_variable(r, map->index);
+ if (vv == NULL || vv->not_found) {
+ *v = *map->default_value;
+ return NGX_OK;
+ }
+
len = vv->len;
if (len && map->hostnames && vv->data[len - 1] == '.') {
diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c
index 120145829..48b46f07d 100644
--- a/src/http/ngx_http_variables.c
+++ b/src/http/ngx_http_variables.c
@@ -367,7 +367,7 @@ ngx_http_get_indexed_variable(ngx_http_request_t *r, ngx_uint_t index)
r->variables[index].valid = 0;
r->variables[index].not_found = 1;
- return NULL;
+ return &r->variables[index];
}