diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2012-02-27 16:57:02 +0000 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2012-02-27 16:57:02 +0000 |
commit | 53d9677de451bae3d3da5c1ecbe6fa7b34fa5313 (patch) | |
tree | 2e8d51500fac5433f872107d533eaddbe5fe0ef6 | |
parent | 5c95f885030d6d303415c72d920e635aa7bab822 (diff) | |
download | nginx-53d9677de451bae3d3da5c1ecbe6fa7b34fa5313.tar.gz nginx-53d9677de451bae3d3da5c1ecbe6fa7b34fa5313.zip |
Fixed null pointer dereference in resolver (ticket #91).
The cycle->new_log.file may not be set before config parsing finished if
there are no error_log directive defined at global level. Fix is to
copy it after config parsing.
Patch by Roman Arutyunyan.
-rw-r--r-- | src/core/ngx_resolver.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c index 5a0ade729..5c516175e 100644 --- a/src/core/ngx_resolver.c +++ b/src/core/ngx_resolver.c @@ -189,11 +189,6 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n) uc->sockaddr = u.addrs->sockaddr; uc->socklen = u.addrs->socklen; uc->server = u.addrs->name; - - uc->log = cf->cycle->new_log; - uc->log.handler = ngx_resolver_log_error; - uc->log.data = uc; - uc->log.action = "resolving"; } return r; @@ -876,6 +871,12 @@ ngx_resolver_send_query(ngx_resolver_t *r, ngx_resolver_node_t *rn) } if (uc->connection == NULL) { + + uc->log = *r->log; + uc->log.handler = ngx_resolver_log_error; + uc->log.data = uc; + uc->log.action = "resolving"; + if (ngx_udp_connect(uc) != NGX_OK) { return NGX_ERROR; } |