Mercurial > hg > nginx
comparison src/http/ngx_http_variables.c @ 3437:90d746a95258 stable-0.7
merge r3283, r3284:
fix segfault if $limit_rate was logged
fix segfault in SSL if limit_rate is used
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 01 Feb 2010 15:20:43 +0000 |
parents | eef19bd3c51e |
children | 667c22171519 |
comparison
equal
deleted
inserted
replaced
3436:fc81ff0c2adc | 3437:90d746a95258 |
---|---|
11 | 11 |
12 | 12 |
13 static ngx_int_t ngx_http_variable_request(ngx_http_request_t *r, | 13 static ngx_int_t ngx_http_variable_request(ngx_http_request_t *r, |
14 ngx_http_variable_value_t *v, uintptr_t data); | 14 ngx_http_variable_value_t *v, uintptr_t data); |
15 static void ngx_http_variable_request_set(ngx_http_request_t *r, | 15 static void ngx_http_variable_request_set(ngx_http_request_t *r, |
16 ngx_http_variable_value_t *v, uintptr_t data); | |
17 static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r, | |
16 ngx_http_variable_value_t *v, uintptr_t data); | 18 ngx_http_variable_value_t *v, uintptr_t data); |
17 static void ngx_http_variable_request_set_size(ngx_http_request_t *r, | 19 static void ngx_http_variable_request_set_size(ngx_http_request_t *r, |
18 ngx_http_variable_value_t *v, uintptr_t data); | 20 ngx_http_variable_value_t *v, uintptr_t data); |
19 static ngx_int_t ngx_http_variable_header(ngx_http_request_t *r, | 21 static ngx_int_t ngx_http_variable_header(ngx_http_request_t *r, |
20 ngx_http_variable_value_t *v, uintptr_t data); | 22 ngx_http_variable_value_t *v, uintptr_t data); |
236 | 238 |
237 { ngx_string("sent_http_cache_control"), NULL, ngx_http_variable_headers, | 239 { ngx_string("sent_http_cache_control"), NULL, ngx_http_variable_headers, |
238 offsetof(ngx_http_request_t, headers_out.cache_control), 0, 0 }, | 240 offsetof(ngx_http_request_t, headers_out.cache_control), 0, 0 }, |
239 | 241 |
240 { ngx_string("limit_rate"), ngx_http_variable_request_set_size, | 242 { ngx_string("limit_rate"), ngx_http_variable_request_set_size, |
241 ngx_http_variable_request, | 243 ngx_http_variable_request_get_size, |
242 offsetof(ngx_http_request_t, limit_rate), | 244 offsetof(ngx_http_request_t, limit_rate), |
243 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 }, | 245 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 }, |
244 | 246 |
245 { ngx_string("nginx_version"), NULL, ngx_http_variable_nginx_version, | 247 { ngx_string("nginx_version"), NULL, ngx_http_variable_nginx_version, |
246 0, 0, 0 }, | 248 0, 0, 0 }, |
566 s->len = v->len; | 568 s->len = v->len; |
567 s->data = v->data; | 569 s->data = v->data; |
568 } | 570 } |
569 | 571 |
570 | 572 |
573 static ngx_int_t | |
574 ngx_http_variable_request_get_size(ngx_http_request_t *r, | |
575 ngx_http_variable_value_t *v, uintptr_t data) | |
576 { | |
577 size_t *sp; | |
578 | |
579 sp = (size_t *) ((char *) r + data); | |
580 | |
581 v->data = ngx_pnalloc(r->pool, NGX_SIZE_T_LEN); | |
582 if (v->data == NULL) { | |
583 return NGX_ERROR; | |
584 } | |
585 | |
586 v->len = ngx_sprintf(v->data, "%uz", *sp) - v->data; | |
587 v->valid = 1; | |
588 v->no_cacheable = 0; | |
589 v->not_found = 0; | |
590 | |
591 return NGX_OK; | |
592 } | |
593 | |
594 | |
571 static void | 595 static void |
572 ngx_http_variable_request_set_size(ngx_http_request_t *r, | 596 ngx_http_variable_request_set_size(ngx_http_request_t *r, |
573 ngx_http_variable_value_t *v, uintptr_t data) | 597 ngx_http_variable_value_t *v, uintptr_t data) |
574 { | 598 { |
575 ssize_t s, *sp; | 599 ssize_t s, *sp; |