summaryrefslogtreecommitdiffhomepage
path: root/src/http/ngx_http_file_cache.c
diff options
context:
space:
mode:
authorSergey Kandaurov <pluknet@nginx.com>2017-08-04 19:37:37 +0300
committerSergey Kandaurov <pluknet@nginx.com>2017-08-04 19:37:37 +0300
commited0b19cdd4a9118cf8795ba2cf0a56684624bb41 (patch)
tree969ed72d2dc5e2e5c0d85c80dc8596d16ad9de64 /src/http/ngx_http_file_cache.c
parentb1274232db13e97c159272bf916366fca0c9feee (diff)
downloadnginx-ed0b19cdd4a9118cf8795ba2cf0a56684624bb41.tar.gz
nginx-ed0b19cdd4a9118cf8795ba2cf0a56684624bb41.tar.bz2
Cache: reset c->body_start when reading a variant on Vary mismatch.
Previously, a variant not present in shared memory and stored on disk using a secondary key was read using c->body_start from a variant stored with a main key. This could result in critical errors "cache file .. has too long header".
Diffstat (limited to 'src/http/ngx_http_file_cache.c')
-rw-r--r--src/http/ngx_http_file_cache.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/http/ngx_http_file_cache.c b/src/http/ngx_http_file_cache.c
index e985f27b1..7a5b4ca5b 100644
--- a/src/http/ngx_http_file_cache.c
+++ b/src/http/ngx_http_file_cache.c
@@ -294,6 +294,8 @@ ngx_http_file_cache_open(ngx_http_request_t *r)
cln->data = c;
}
+ c->buffer_size = c->body_start;
+
rc = ngx_http_file_cache_exists(cache, c);
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
@@ -1230,7 +1232,7 @@ ngx_http_file_cache_reopen(ngx_http_request_t *r, ngx_http_cache_t *c)
c->secondary = 1;
c->file.name.len = 0;
- c->body_start = c->buf->end - c->buf->start;
+ c->body_start = c->buffer_size;
ngx_memcpy(c->key, c->variant, NGX_HTTP_CACHE_KEY_LEN);