comparison src/http/modules/ngx_http_proxy_module.c @ 591:bc110f60c0de NGINX_0_8_41

nginx 0.8.41 *) Security: nginx/Windows worker might be terminated abnormally if a requested file name has invalid UTF-8 encoding. *) Change: now nginx allows to use spaces in a request line. *) Bugfix: the "proxy_redirect" directive changed incorrectly a backend "Refresh" response header line. Thanks to Andrey Andreew and Max Sogin. *) Bugfix: nginx did not support path without host name in "Destination" request header line.
author Igor Sysoev <http://sysoev.ru>
date Tue, 15 Jun 2010 00:00:00 +0400
parents 01f2313e34f1
children 4d3e880ce86c
comparison
equal deleted inserted replaced
590:dd4c3325a56f 591:bc110f60c0de
909 909
910 } else { 910 } else {
911 loc_len = (r->valid_location && ctx->vars.uri.len) ? 911 loc_len = (r->valid_location && ctx->vars.uri.len) ?
912 plcf->location.len : 0; 912 plcf->location.len : 0;
913 913
914 if (r->quoted_uri || r->internal) { 914 if (r->quoted_uri || r->space_in_uri || r->internal) {
915 escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len, 915 escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
916 r->uri.len - loc_len, NGX_ESCAPE_URI); 916 r->uri.len - loc_len, NGX_ESCAPE_URI);
917 } 917 }
918 918
919 uri_len = ctx->vars.uri.len + r->uri.len - loc_len + escape 919 uri_len = ctx->vars.uri.len + r->uri.len - loc_len + escape
1763 pr->redirect.len) != 0) 1763 pr->redirect.len) != 0)
1764 { 1764 {
1765 return NGX_DECLINED; 1765 return NGX_DECLINED;
1766 } 1766 }
1767 1767
1768 len = prefix + pr->replacement.text.len + h->value.len - pr->redirect.len; 1768 len = pr->replacement.text.len + h->value.len - pr->redirect.len;
1769 1769
1770 data = ngx_pnalloc(r->pool, len); 1770 data = ngx_pnalloc(r->pool, len);
1771 if (data == NULL) { 1771 if (data == NULL) {
1772 return NGX_ERROR; 1772 return NGX_ERROR;
1773 } 1773 }
1774 1774
1775 p = data; 1775 p = ngx_copy(data, h->value.data, prefix);
1776
1777 p = ngx_copy(p, h->value.data, prefix);
1778 1776
1779 if (pr->replacement.text.len) { 1777 if (pr->replacement.text.len) {
1780 p = ngx_copy(p, pr->replacement.text.data, pr->replacement.text.len); 1778 p = ngx_copy(p, pr->replacement.text.data, pr->replacement.text.len);
1781 } 1779 }
1782 1780
1810 ngx_memzero(&e, sizeof(ngx_http_script_engine_t)); 1808 ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
1811 1809
1812 e.ip = pr->replacement.vars.lengths; 1810 e.ip = pr->replacement.vars.lengths;
1813 e.request = r; 1811 e.request = r;
1814 1812
1815 len = prefix + h->value.len - pr->redirect.len; 1813 len = h->value.len - pr->redirect.len;
1816 1814
1817 while (*(uintptr_t *) e.ip) { 1815 while (*(uintptr_t *) e.ip) {
1818 lcode = *(ngx_http_script_len_code_pt *) e.ip; 1816 lcode = *(ngx_http_script_len_code_pt *) e.ip;
1819 len += lcode(&e); 1817 len += lcode(&e);
1820 } 1818 }
1822 data = ngx_pnalloc(r->pool, len); 1820 data = ngx_pnalloc(r->pool, len);
1823 if (data == NULL) { 1821 if (data == NULL) {
1824 return NGX_ERROR; 1822 return NGX_ERROR;
1825 } 1823 }
1826 1824
1827 p = data; 1825 p = ngx_copy(data, h->value.data, prefix);
1828
1829 p = ngx_copy(p, h->value.data, prefix);
1830 1826
1831 e.ip = pr->replacement.vars.values; 1827 e.ip = pr->replacement.vars.values;
1832 e.pos = p; 1828 e.pos = p;
1833 1829
1834 while (*(uintptr_t *) e.ip) { 1830 while (*(uintptr_t *) e.ip) {