Mercurial > hg > nginx-vendor-current
diff src/http/ngx_http_core_module.c @ 634:23ef0645ea57 NGINX_1_1_1
nginx 1.1.1
*) Change: now cache loader processes either as many files as specified
by "loader_files" parameter or works no more than time specified by
"loader_threshold" parameter during each iteration.
*) Change: now SIGWINCH signal works only in deamon mode.
*) Feature: now shared zones and caches use POSIX semaphores on
Solaris.
Thanks to Den Ivanov.
*) Feature: accept filters are now supported on NetBSD.
*) Bugfix: nginx could not be build on Linux 3.0.
*) Bugfix: nginx did not use gzipping in some cases; the bug had
appeared in 1.1.0.
*) Bugfix: request body might be incorrectly processed if client used
pipelining.
*) Bugfix: in the "request_body_in_single_buf" directive.
*) Bugfix: in "proxy_set_body" and "proxy_pass_request_body" directives
if SSL connection to backend was used.
*) Bugfix: nginx hogged CPU if all servers in an upstream were marked
as "down".
*) Bugfix: a segmentation fault might occur during reconfiguration if
ssl_session_cache was defined but not used in a previous
configuration.
*) Bugfix: a segmentation fault might occur in a worker process if many
backup servers were used in an upstream.
*) Bugfix: a segmentation fault might occur in a worker process if
"fastcgi/scgi/uwsgi_param" directives were used with values starting
with "HTTP_"; the bug had appeared in 0.8.40.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 22 Aug 2011 00:00:00 +0400 |
parents | 5b73504dd4ba |
children | 943566b4d82e |
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -71,6 +71,7 @@ static char *ngx_http_core_resolver(ngx_ void *conf); #if (NGX_HTTP_GZIP) static ngx_int_t ngx_http_gzip_accept_encoding(ngx_str_t *ae); +static ngx_uint_t ngx_http_gzip_quantity(u_char *p, u_char *last); static char *ngx_http_gzip_disable(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); #endif @@ -2189,7 +2190,7 @@ ok: /* * gzip is enabled for the following quantities: - * "gzip; q=0.001" ... "gzip; q=0.999", "gzip; q=1" + * "gzip; q=0.001" ... "gzip; q=1.000" * gzip is disabled for the following quantities: * "gzip; q=0" ... "gzip; q=0.000", and for any invalid cases */ @@ -2197,8 +2198,7 @@ ok: static ngx_int_t ngx_http_gzip_accept_encoding(ngx_str_t *ae) { - u_char c, *p, *start, *last; - ngx_uint_t n, q; + u_char *p, *start, *last; start = ae->data; last = start + ae->len; @@ -2255,56 +2255,65 @@ equal: return NGX_DECLINED; } - c = *p++; - - if (c == '1') { - if (p == last || *p == ',' || *p == ' ') { - return NGX_OK; - } + if (ngx_http_gzip_quantity(p, last) == 0) { return NGX_DECLINED; } - if (c != '0') { - return NGX_DECLINED; + return NGX_OK; +} + + +ngx_uint_t +ngx_http_gzip_quantity(u_char *p, u_char *last) +{ + u_char c; + ngx_uint_t n, q; + + c = *p++; + + if (c != '0' && c != '1') { + return 0; } + q = (c - '0') * 100; + if (p == last) { - return NGX_DECLINED; + return q; } - if (*p++ != '.') { - return NGX_DECLINED; + c = *p++; + + if (c == ',' || c == ' ') { + return q; + } + + if (c != '.') { + return 0; } n = 0; - q = 0; while (p < last) { c = *p++; - if (c == ',') { + if (c == ',' || c == ' ') { break; } - if (c >= '1' && c <= '9') { - n++; - q++; - continue; - } - - if (c == '0') { + if (c >= '0' && c <= '9') { + q += c - '0'; n++; continue; } - return NGX_DECLINED; + return 0; } - if (n < 4 && q != 0) { - return NGX_OK; + if (q > 100 || n > 3) { + return 0; } - return NGX_DECLINED; + return q; } #endif @@ -3482,7 +3491,7 @@ ngx_http_core_merge_loc_conf(ngx_conf_t prev->keepalive_header, 0); ngx_conf_merge_uint_value(conf->keepalive_requests, prev->keepalive_requests, 100); - ngx_conf_merge_msec_value(conf->lingering_close, + ngx_conf_merge_uint_value(conf->lingering_close, prev->lingering_close, NGX_HTTP_LINGERING_ON); ngx_conf_merge_msec_value(conf->lingering_time, prev->lingering_time, 30000);