Mercurial > hg > nginx
changeset 4968:90d8c3400769
Geo: fixed the "ranges" without ranges case.
The following configuration returned an empty value for $geo:
geo $geo {
ranges;
default default;
}
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Fri, 14 Dec 2012 19:56:03 +0000 |
parents | a9d60fafaa85 |
children | 2efa05bbbc1e |
files | src/http/modules/ngx_http_geo_module.c |
diffstat | 1 files changed, 18 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_geo_module.c Fri Dec 14 19:35:37 2012 +0000 +++ b/src/http/modules/ngx_http_geo_module.c Fri Dec 14 19:56:03 2012 +0000 @@ -189,19 +189,22 @@ *v = *ctx->u.high.default_value; - addr = ngx_http_geo_addr(r, ctx); - - range = ctx->u.high.low[addr >> 16]; - - if (range) { - n = addr & 0xffff; - do { - if (n >= (ngx_uint_t) range->start && n <= (ngx_uint_t) range->end) - { - *v = *range->value; - break; - } - } while ((++range)->value); + if (ctx->u.high.low) { + addr = ngx_http_geo_addr(r, ctx); + + range = ctx->u.high.low[addr >> 16]; + + if (range) { + n = addr & 0xffff; + do { + if (n >= (ngx_uint_t) range->start + && n <= (ngx_uint_t) range->end) + { + *v = *range->value; + break; + } + } while ((++range)->value); + } } ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, @@ -384,9 +387,9 @@ geo->proxies = ctx.proxies; geo->proxy_recursive = ctx.proxy_recursive; - if (ctx.high.low) { + if (ctx.ranges) { - if (!ctx.binary_include) { + if (ctx.high.low && !ctx.binary_include) { for (i = 0; i < 0x10000; i++) { a = (ngx_array_t *) ctx.high.low[i];