diff options
author | Igor Sysoev <igor@sysoev.ru> | 2008-08-26 20:11:30 +0400 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2008-08-26 20:11:30 +0400 |
commit | d3bf7c1cd511a7defc463a2ff153c2540ca33200 (patch) | |
tree | 70ff89d3c72908e494fc8975c09e0c1f3e769222 | |
parent | 54477e417a9b571b970dd43b62672fac28a267ee (diff) |
fix bugs introduced in r2204
-rw-r--r-- | src/core/ngx_inet.c | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c index d565705b0..6568cecb7 100644 --- a/src/core/ngx_inet.c +++ b/src/core/ngx_inet.c @@ -256,6 +256,8 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u) ngx_int_t n; struct hostent *h; + u->family = AF_INET; + host = u->url.data; last = host + u->url.len; @@ -279,12 +281,23 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u) if (port) { port++; - if (last - port == 0) { + len = last - port; + + if (len == 0) { + u->err = "invalid port"; + return NGX_ERROR; + } + + n = ngx_atoi(port, len); + + if (n < 1 || n > 65536) { u->err = "invalid port"; return NGX_ERROR; } - u->port_text.len = last - port; + u->port = (in_port_t) n; + + u->port_text.len = len; u->port_text.data = port; last = port - 1; @@ -332,6 +345,10 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u) u->host.len = len; u->host.data = host; + if (u->no_resolve) { + return NGX_OK; + } + if (len++) { p = ngx_alloc(len, pool->log); @@ -361,24 +378,6 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u) u->addr.in_addr = INADDR_ANY; } - if (u->port_text.len) { - - n = ngx_atoi(u->port_text.data, u->port_text.len); - - if (n < 1 || n > 65536) { - u->err = "invalid port"; - return NGX_ERROR; - } - - u->port = (in_port_t) n; - } - - u->family = AF_INET; - - if (u->no_resolve) { - return NGX_OK; - } - if (u->no_port) { u->port = u->default_port; } |