summaryrefslogtreecommitdiffhomepage
path: root/src/core/ngx_resolver.c
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2012-04-26 12:58:42 +0000
committerRuslan Ermilov <ru@nginx.com>2012-04-26 12:58:42 +0000
commit487ba70126ddcde8f889e20617b927c9d716c792 (patch)
treef65b1792ca8fddac32765dbd5ac93006494aaa64 /src/core/ngx_resolver.c
parent6ad02389c3947f8af2ce295d83e4c27427c9b644 (diff)
downloadnginx-487ba70126ddcde8f889e20617b927c9d716c792.tar.gz
nginx-487ba70126ddcde8f889e20617b927c9d716c792.tar.bz2
Fixed segmentation fault in ngx_resolver_create_name_query().
If name passed for resolution was { 0, NULL } (e.g. as a result of name server returning CNAME pointing to ".") pointer wrapped to (void *) -1 resulting in segmentation fault on an attempt to dereference it. Reported by Lanshun Zhou.
Diffstat (limited to 'src/core/ngx_resolver.c')
-rw-r--r--src/core/ngx_resolver.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index 02c484da6..ecf97d7f7 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -1834,6 +1834,10 @@ ngx_resolver_create_name_query(ngx_resolver_node_t *rn, ngx_resolver_ctx_t *ctx)
p--;
*p-- = '\0';
+ if (ctx->name.len == 0) {
+ return NGX_DECLINED;
+ }
+
for (s = ctx->name.data + ctx->name.len - 1; s >= ctx->name.data; s--) {
if (*s != '.') {
*p = *s;