Mercurial > hg > nginx
comparison src/http/ngx_http_request.c @ 2552:0cf6662e4448
fix segfaults introduced in r2550
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 09 Mar 2009 08:50:34 +0000 |
parents | 2d34fba7cf06 |
children | 8ec97ff12a0a |
comparison
equal
deleted
inserted
replaced
2551:0e6f00346fa1 | 2552:0cf6662e4448 |
---|---|
1609 | 1609 |
1610 static ngx_int_t | 1610 static ngx_int_t |
1611 ngx_http_find_virtual_server(ngx_http_request_t *r, u_char *host, size_t len) | 1611 ngx_http_find_virtual_server(ngx_http_request_t *r, u_char *host, size_t len) |
1612 { | 1612 { |
1613 u_char *server; | 1613 u_char *server; |
1614 size_t ncaptures; | |
1614 ngx_uint_t hash; | 1615 ngx_uint_t hash; |
1615 ngx_http_virtual_names_t *vn; | 1616 ngx_http_virtual_names_t *vn; |
1616 ngx_http_core_loc_conf_t *clcf; | 1617 ngx_http_core_loc_conf_t *clcf; |
1617 ngx_http_core_srv_conf_t *cscf; | 1618 ngx_http_core_srv_conf_t *cscf; |
1618 u_char buf[32]; | 1619 u_char buf[32]; |
1651 ngx_http_server_name_t *sn; | 1652 ngx_http_server_name_t *sn; |
1652 | 1653 |
1653 name.len = len; | 1654 name.len = len; |
1654 name.data = server; | 1655 name.data = server; |
1655 | 1656 |
1656 len = 0; | 1657 ncaptures = 0; |
1657 | 1658 |
1658 sn = vn->regex; | 1659 sn = vn->regex; |
1659 | 1660 |
1660 for (i = 0; i < vn->nregex; i++) { | 1661 for (i = 0; i < vn->nregex; i++) { |
1661 | 1662 |
1662 if (sn[i].captures && r->captures == NULL) { | 1663 if (sn[i].captures && r->captures == NULL) { |
1663 | 1664 |
1664 len = (NGX_HTTP_MAX_CAPTURES + 1) * 3 * sizeof(int); | 1665 ncaptures = (NGX_HTTP_MAX_CAPTURES + 1) * 3 * sizeof(int); |
1665 | 1666 |
1666 r->captures = ngx_palloc(r->pool, len); | 1667 r->captures = ngx_palloc(r->pool, ncaptures); |
1667 if (r->captures == NULL) { | 1668 if (r->captures == NULL) { |
1668 return NGX_ERROR; | 1669 return NGX_ERROR; |
1669 } | 1670 } |
1670 | 1671 |
1671 if (server == buf) { | 1672 if (server == buf) { |
1677 ngx_memcpy(server, buf, len); | 1678 ngx_memcpy(server, buf, len); |
1678 name.data = server; | 1679 name.data = server; |
1679 } | 1680 } |
1680 } | 1681 } |
1681 | 1682 |
1682 n = ngx_regex_exec(sn[i].regex, &name, r->captures, len); | 1683 n = ngx_regex_exec(sn[i].regex, &name, r->captures, ncaptures); |
1683 | 1684 |
1684 if (n == NGX_REGEX_NO_MATCHED) { | 1685 if (n == NGX_REGEX_NO_MATCHED) { |
1685 continue; | 1686 continue; |
1686 } | 1687 } |
1687 | 1688 |
1695 | 1696 |
1696 /* match */ | 1697 /* match */ |
1697 | 1698 |
1698 cscf = sn[i].core_srv_conf; | 1699 cscf = sn[i].core_srv_conf; |
1699 | 1700 |
1700 r->ncaptures = len; | 1701 r->ncaptures = ncaptures; |
1701 r->captures_data = server; | 1702 r->captures_data = server; |
1702 | 1703 |
1703 goto found; | 1704 goto found; |
1704 } | 1705 } |
1705 } | 1706 } |