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 }