From 44d8bc2ff19385cf85c09bffdc21fe7a9eb19976 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Fri, 20 Oct 2006 19:07:50 +0000 Subject: fix segfault if $server_addr failed --- src/http/modules/ngx_http_charset_filter_module.c | 8 ++++++++ src/http/modules/ngx_http_map_module.c | 5 +++++ src/http/ngx_http_variables.c | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) (limited to 'src/http') 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]; } -- cgit