Mercurial > hg > nginx-vendor-1-0
comparison src/http/modules/ngx_http_proxy_module.c @ 578: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
577:dd4c3325a56f | 578: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) { |