Mercurial > hg > nginx-vendor-0-8
comparison src/core/ngx_resolver.c @ 528:005a70f9573b NGINX_0_8_16
nginx 0.8.16
*) Feature: the "image_filter_transparency" directive.
*) Bugfix: "addition_types" directive was incorrectly named
"addtion_types".
*) Bugfix: resolver cache poisoning.
Thanks to Matthew Dempsky.
*) Bugfix: memory leak in resolver.
Thanks to Matthew Dempsky.
*) Bugfix: invalid request line in $request variable was written in
access_log only if error_log was set to "info" or "debug" level.
*) Bugfix: in PNG alpha-channel support in the
ngx_http_image_filter_module.
*) Bugfix: nginx always added "Vary: Accept-Encoding" response header
line, if both "gzip_static" and "gzip_vary" were on.
*) Bugfix: in UTF-8 encoding support by "try_files" directive in
nginx/Windows.
*) Bugfix: in "post_action" directive usage; the bug had appeared in
0.8.11.
Thanks to Igor Artemiev.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Tue, 22 Sep 2009 00:00:00 +0400 |
parents | ed5e10fb40fc |
children | c04fa65fe604 |
comparison
equal
deleted
inserted
replaced
527:a607f3a5aefe | 528:005a70f9573b |
---|---|
1147 "wrong ident %ui response for %V, expect %ui", | 1147 "wrong ident %ui response for %V, expect %ui", |
1148 ident, &name, qident); | 1148 ident, &name, qident); |
1149 goto failed; | 1149 goto failed; |
1150 } | 1150 } |
1151 | 1151 |
1152 ngx_resolver_free(r, name.data); | |
1153 | |
1152 if (code == 0 && nan == 0) { | 1154 if (code == 0 && nan == 0) { |
1153 code = 3; /* NXDOMAIN */ | 1155 code = 3; /* NXDOMAIN */ |
1154 } | 1156 } |
1155 | 1157 |
1156 if (code) { | 1158 if (code) { |
1397 return; | 1399 return; |
1398 | 1400 |
1399 failed: | 1401 failed: |
1400 | 1402 |
1401 /* unlock name mutex */ | 1403 /* unlock name mutex */ |
1404 | |
1405 ngx_resolver_free(r, name.data); | |
1402 | 1406 |
1403 return; | 1407 return; |
1404 } | 1408 } |
1405 | 1409 |
1406 | 1410 |
1593 | 1597 |
1594 static ngx_resolver_node_t * | 1598 static ngx_resolver_node_t * |
1595 ngx_resolver_lookup_name(ngx_resolver_t *r, ngx_str_t *name, uint32_t hash) | 1599 ngx_resolver_lookup_name(ngx_resolver_t *r, ngx_str_t *name, uint32_t hash) |
1596 { | 1600 { |
1597 ngx_int_t rc; | 1601 ngx_int_t rc; |
1598 size_t len; | |
1599 ngx_rbtree_node_t *node, *sentinel; | 1602 ngx_rbtree_node_t *node, *sentinel; |
1600 ngx_resolver_node_t *rn; | 1603 ngx_resolver_node_t *rn; |
1601 | 1604 |
1602 node = r->name_rbtree.root; | 1605 node = r->name_rbtree.root; |
1603 sentinel = r->name_rbtree.sentinel; | 1606 sentinel = r->name_rbtree.sentinel; |
1617 /* hash == node->key */ | 1620 /* hash == node->key */ |
1618 | 1621 |
1619 do { | 1622 do { |
1620 rn = (ngx_resolver_node_t *) node; | 1623 rn = (ngx_resolver_node_t *) node; |
1621 | 1624 |
1622 len = (name->len > (size_t) rn->nlen) ? rn->nlen : name->len; | 1625 rc = ngx_memn2cmp(name->data, rn->name, name->len, rn->nlen); |
1623 | |
1624 rc = ngx_strncmp(name->data, rn->name, len); | |
1625 | 1626 |
1626 if (rc == 0) { | 1627 if (rc == 0) { |
1627 return rn; | 1628 return rn; |
1628 } | 1629 } |
1629 | 1630 |
1673 | 1674 |
1674 static void | 1675 static void |
1675 ngx_resolver_rbtree_insert_value(ngx_rbtree_node_t *temp, | 1676 ngx_resolver_rbtree_insert_value(ngx_rbtree_node_t *temp, |
1676 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) | 1677 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) |
1677 { | 1678 { |
1678 size_t len; | |
1679 ngx_rbtree_node_t **p; | 1679 ngx_rbtree_node_t **p; |
1680 ngx_resolver_node_t *rn, *rn_temp; | 1680 ngx_resolver_node_t *rn, *rn_temp; |
1681 | 1681 |
1682 for ( ;; ) { | 1682 for ( ;; ) { |
1683 | 1683 |
1692 } else { /* node->key == temp->key */ | 1692 } else { /* node->key == temp->key */ |
1693 | 1693 |
1694 rn = (ngx_resolver_node_t *) node; | 1694 rn = (ngx_resolver_node_t *) node; |
1695 rn_temp = (ngx_resolver_node_t *) temp; | 1695 rn_temp = (ngx_resolver_node_t *) temp; |
1696 | 1696 |
1697 len = (rn->nlen > rn_temp->nlen) ? rn_temp->nlen : rn->nlen; | 1697 p = (ngx_memn2cmp(rn->name, rn_temp->name, rn->nlen, rn_temp->nlen) |
1698 | 1698 < 0) ? &temp->left : &temp->right; |
1699 p = (ngx_strncmp(rn->name, rn_temp->name, len) < 0) | |
1700 ? &temp->left : &temp->right; | |
1701 } | 1699 } |
1702 | 1700 |
1703 if (*p == sentinel) { | 1701 if (*p == sentinel) { |
1704 break; | 1702 break; |
1705 } | 1703 } |