]> git.kaiwu.me - nginx.git/commitdiff
store name pointer in variable allocated on stack
authorIgor Sysoev <igor@sysoev.ru>
Thu, 29 Jan 2009 14:35:23 +0000 (14:35 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Thu, 29 Jan 2009 14:35:23 +0000 (14:35 +0000)
as resolver ctx may be already deallocated at this point

src/core/ngx_resolver.c

index a49143c7f3a229377562bc5b48a549b2e79a5a10..8e8d524d9ba749f98cd247a21c9248702b08d018 100644 (file)
@@ -578,6 +578,7 @@ failed:
 ngx_int_t
 ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
 {
+    u_char               *name;
     ngx_resolver_t       *r;
     ngx_resolver_node_t  *rn;
 
@@ -601,19 +602,21 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
 
             ngx_queue_insert_head(&r->addr_expire_queue, &rn->queue);
 
-            ctx->name.len = rn->nlen;
-            ctx->name.data = ngx_resolver_dup(r, rn->name, rn->nlen);
-            if (ctx->name.data == NULL) {
+            name = ngx_resolver_dup(r, rn->name, rn->nlen);
+            if (name == NULL) {
                 goto failed;
             }
 
+            ctx->name.len = rn->nlen;
+            ctx->name.data = name;
+
             /* unlock addr mutex */
 
             ctx->state = NGX_OK;
 
             ctx->handler(ctx);
 
-            ngx_resolver_free(r, ctx->name.data);
+            ngx_resolver_free(r, name);
 
             return NGX_OK;
         }