store name pointer in variable allocated on stack
as resolver ctx may be already deallocated at this point
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index a49143c..8e8d524 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -578,6 +578,7 @@
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_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;
}