Mercurial > hg > nginx
comparison src/http/modules/ngx_http_proxy_module.c @ 4398:3d51ba7f347b
Fixed: proxy_redirect with regex might broke Refresh header.
The problem was localized in ngx_http_proxy_rewrite_redirect_regex() handler
function which did not take into account prefix when overwriting header value.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Tue, 10 Jan 2012 15:09:45 +0000 |
parents | 70ba81827472 |
children | a0505851e70c |
comparison
equal
deleted
inserted
replaced
4397:d3000365ac65 | 4398:3d51ba7f347b |
---|---|
2346 | 2346 |
2347 static ngx_int_t | 2347 static ngx_int_t |
2348 ngx_http_proxy_rewrite_redirect_regex(ngx_http_request_t *r, ngx_table_elt_t *h, | 2348 ngx_http_proxy_rewrite_redirect_regex(ngx_http_request_t *r, ngx_table_elt_t *h, |
2349 size_t prefix, ngx_http_proxy_redirect_t *pr) | 2349 size_t prefix, ngx_http_proxy_redirect_t *pr) |
2350 { | 2350 { |
2351 size_t len; | |
2352 u_char *data; | |
2351 ngx_str_t redirect, replacement; | 2353 ngx_str_t redirect, replacement; |
2352 | 2354 |
2353 redirect.len = h->value.len - prefix; | 2355 redirect.len = h->value.len - prefix; |
2354 redirect.data = h->value.data + prefix; | 2356 redirect.data = h->value.data + prefix; |
2355 | 2357 |
2359 | 2361 |
2360 if (ngx_http_complex_value(r, &pr->replacement, &replacement) != NGX_OK) { | 2362 if (ngx_http_complex_value(r, &pr->replacement, &replacement) != NGX_OK) { |
2361 return NGX_ERROR; | 2363 return NGX_ERROR; |
2362 } | 2364 } |
2363 | 2365 |
2364 h->value = replacement; | 2366 if (!prefix) { |
2367 h->value = replacement; | |
2368 return NGX_OK; | |
2369 } | |
2370 | |
2371 len = prefix + replacement.len; | |
2372 | |
2373 data = ngx_pnalloc(r->pool, len); | |
2374 if (data == NULL) { | |
2375 return NGX_ERROR; | |
2376 } | |
2377 | |
2378 ngx_memcpy(data, h->value.data, prefix); | |
2379 ngx_memcpy(data + prefix, replacement.data, replacement.len); | |
2380 | |
2381 h->value.len = len; | |
2382 h->value.data = data; | |
2365 | 2383 |
2366 return NGX_OK; | 2384 return NGX_OK; |
2367 } | 2385 } |
2368 | 2386 |
2369 #endif | 2387 #endif |